【mysql】知識點

1、mysql如何讓自增id歸0

  • 當你再也不須要該表時, drop
  • 當你仍要保留該表,但要刪除全部記錄時, truncate
  • 當你要刪除部分記錄時(always with a WHERE clause), delete.

方法一: 若是曾經的數據都不須要的話,能夠直接清空全部數據,並將自增字段恢復從1開始計數 mysql

truncate table 表名 sql

方法二: 許多時候但願table中數據的id不要從1開始,像qq, id從10000開始
代碼以下:測試

alter table 表名 AUTO_INCREMENT=10000;
並且該語句也適用於修改現有表的id上, 好比大批量刪除數據後,想id從654321退回123456開始spa

alter table 表名 AUTO_INCREMENT=123456;code

可是通過實際測試, 單機的Mysql沒有問題, Mysql Cluster下是無效的,可能在主鍵上的機制,仍是有所不一樣。blog

2、mysql數據表增長列

  由於Drop Table會把數據也刪除掉,要增長數據列的時候,最好用Alter語句。如:索引

alter table OrderSearchSummary add IsMonthly int(11) not NULL DEFAULT 0;it

alter table OrderSearchSummary add DistributorFirstName varchar(50);table

3、存在則更新,不存在則增長

  在實際應用中,常常碰到導入數據的功能,當導入的數據不存在時則進行添加,有修改時則進行更新class

在剛碰到的時候,第一反應是將其實現分爲兩塊,分別是判斷增長,判斷更新。

後來發如今mysql中有  ON DUPLICATE KEY UPDATE一步就能夠完成。

該語句是基於惟一索引或主鍵使用,好比一個字段a被加上了unique index,而且表中已經存在了一條記錄值爲1:

下面兩個語句會有相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)  
  ON DUPLICATE KEY UPDATE c=c+1;  
  
UPDATE table SET c=c+1 WHERE a=1;

 ON DUPLICATE KEY UPDATE後面能夠放多個字段,用英文逗號分割。

INSERT INTO FerDB.RedisConfig(`RedisKey`, `RedisValue`, `RedisDesc`, `CreateDataTime`, `ExpiredMinutes`, `IsEncrypt`, `IsAdmin`, `EnableEdit`) 
VALUES ('urn: MinTimeDiff', '120', '最低時間差(分鐘),默認120,參考範圍(30~600)', '2019-01-25 08:00:00', '14400', '0', '0', '1') 
ON DUPLICATE KEY UPDATE RedisValue='120', RedisDesc='最低時間差(分鐘),默認120,參考範圍(30~600)', CreateDataTime='2019-01-25 08:00:00', 
ExpiredMinutes='14400', IsEncrypt='0', IsAdmin='0', EnableEdit='1';
相關文章
相關標籤/搜索