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,然後加1再作為id插入。
當然還有通過臨時表的方式來保證最終插入的都是成功的,不過比較麻煩了。
mysql 插入資料失敗防止自增長主鍵增長的方法
mysql設定了自增長主鍵id,插入失敗的那個自增長id也加一的,比如失敗5個,下乙個成功的不是在原來最後成功資料加1,而是直接變成加6了,失敗次數一次就自動增長1了,能不能讓失敗的不增長的?或者說mysql插入資料失敗,怎麼能防止主鍵增長?mysql不保證auto increment依次增長 1,...
mysql 插入資料失敗防止自增長主鍵增長的方法
mysql 插入資料失敗防止自增長主鍵增長的方法 mysql設定了自增長主鍵id,插入失敗的那個自增長id也加一的,比如失敗5個,下乙個成功的不是在原來最後成功資料加1,而是直接變成加6了,失敗次數一次就自動增長1了,能不能讓失敗的不增長的?或者說mysql插入資料失敗,怎麼能防止主鍵增長?mysq...
Mysql 主鍵自增插入資料問題
mysql資料庫表中有自增主鍵id,當用sql插入語句中插入語句帶有id列值記錄的時候 如果指定了該列的值,則新插入的值不能和已有的值重複,而且必須大於其中最大的乙個值 也可以不指定該列的值,只將其他列的值插入,讓id還是按照mysql自增自己填 具體 1.建立資料庫 create table if...