mysql 插入數據失敗防止自增長主鍵增長的方法
mysql設置了自增長主鍵ID,插入失敗的那個自增長ID也加一的,比如失敗5個,下一個成功的不是在原來最后成功數據加1,而是直接變成加6了,失敗次數一次就自動增長1了,能不能讓失敗的不增長的?
或者說mysql插入數據失敗,怎么能防止主鍵增長?
MYSQL不保證AUTO_INCREMENT依次增長(1,2,3,4,5),但是可以保證正向增長(1,3,5,9)所以,當你某次操作失敗后,下次AUTO_INCREMENT就不是順序的了。
innodb的自增是緩存在內存字典中的,分配方式是先預留,然后再插入的。所以插入失敗不會回滾內存字典。讓innodb識別到當前最大id的方法是重啟server 更新AUTO_INCREMENT緩存,或者用alter table `表` AUTO_INCREMENT = 最大數;
這種思路基本不實用,下面介紹一種方便的方法。
Mysql主鍵如果在insert插入時有值,將不使用自增。也就是說插入數據的時候只要自己把ID加上就按照插入的數進行自增了,這個數通過自己的邏輯判斷代碼來賦值,只要ID不重復就可以了。例如:
String sql = "insert ignore into mytable(id,number,opendate) values(?,?,?)";
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就做到可以自由控制了。
來自本人 Mysql主鍵插入時有值將不使用自增可用程序控制_百度經驗
http://jingyan.baidu.com/article/48206aeae55922216ad6b384.html