方法一: 若是曾經的數據都不須要的話,能夠直接清空全部數據,並將自增字段恢復從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
由於Drop Table會把數據也刪除掉,要增長數據列的時候,最好用Alter語句。如:索引
alter table OrderSearchSummary add IsMonthly int(11) not NULL DEFAULT 0;it
alter table OrderSearchSummary add DistributorFirstName varchar(50);table
在實際應用中,常常碰到導入數據的功能,當導入的數據不存在時則進行添加,有修改時則進行更新,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';