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

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就作到能夠自由控制了。

相關文章
相關標籤/搜索