程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql 插入數據失敗防止自增長主鍵增長的方法,mysql主鍵

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

編輯:MySQL綜合教程

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插入。

當然還有通過臨時表的方式來保證最終插入的都是成功的,不過比較麻煩了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved