mysql 插入數據失敗防止自增長主鍵增長的方法


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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM