mysql 插入數據失敗防止自增加主鍵增加的方法mysql
mysql設置了自增加主鍵ID,插入失敗的那個自增加ID也加一的,好比失敗5個,下一個成功的不是在原來最後成功數據加1,而是直接變成加6了,失敗次數一次就自動增加1了,能不能讓失敗的不增加的?sql
或者說mysql插入數據失敗,怎麼能防止主鍵增加?緩存
MYSQL不保證AUTO_INCREMENT依次增加(1,2,3,4,5),可是能夠保證正向增加(1,3,5,9)因此,當你某次操做失敗後,下次AUTO_INCREMENT就不是順序的了。server
innodb的自增是緩存在內存字典中的,分配方式是先預留,而後再插入的。因此插入失敗不會回滾內存字典。讓innodb識別到當前最大id的方法是重啓server 更新AUTO_INCREMENT緩存,或者用alter table `表` AUTO_INCREMENT = 最大數; 內存
這種思路基本不實用,下面介紹一種方便的方法。innodb
Mysql主鍵若是在insert插入時有值,將不使用自增。也就是說插入數據的時候只要本身把ID加上就按照插入的數進行自增了,這個數經過本身的邏輯判斷代碼來賦值,只要ID不重複就能夠了。例如:table
String sql = "insert ignore into mytable(id,number,opendate) values(?,?,?)";date
new Object[] {id,number,opendate});程序
另一個保證的方法就是每次插入前查詢最大ID,而後加1再做爲ID插入。方法
固然還有經過臨時表的方式來保證最終插入的都是成功的,不過比較麻煩了。
===============================================================
Mysql主鍵插入時有值將不使用自增可用程序控制 mysql設置了自增加主鍵ID,插入失敗的那個自增加ID也加一的,好比失敗5個,下一個成功的不是在原來最後成功數據加1,而是直接變成加6了,失敗次數一次就自動增加1了,能不能讓失敗的不增加用程序自由控制?
方法/步驟 1 Mysql主鍵若是在insert插入時有值,將不使用自增。也就是說插入數據的時候只要本身把ID加上就按照插入的數進行自增了,這個數經過本身的邏輯判斷代碼來賦值,只要ID不重複就能夠了。例如: String sql = "insert ignore into mytable(id,number,opendate) values(?,?,?)"; new Object[] {id,number,opendate}); 用程序控制輸入的ID就作到能夠自由控制了。