最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql更新自增主鍵id遇到的問題

 更新時間:2021年11月30日 16:35:01   作者:code1Boy  
本文主要介紹了Mysql更新自增主鍵id遇到的問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>

本是一個自己知道的問題,還是差點踩坑(差點忘了,還好上線前整理上線點時想起來了),特此記錄下來

為什么要更新自增id

我是因為歷史業(yè)務上的坑,導致必須更新一批id,且為了避免沖突需要將id擴大多少倍進行更新,因為我這個表的數(shù)據(jù)數(shù)量不高,屬于高讀低寫的情況,所以就簡單的擴大了1000

問題

MySQL中如果我們把自增主鍵更新為更大的值(例如現(xiàn)在自增id最大值是1000,你更新id=49這個記錄到id=1049),MySQL并不會把表的自增值修改為更新后的值,在某些情況下,如DDL,重啟等之后,業(yè)務開始報錯,這時如果不知道當前操作可能會誤認為是當前業(yè)務操作的問題,實則是因為更新id埋下的坑(主鍵沖突)
如下圖:

圖1:更新前原始數(shù)據(jù)

原始數(shù)據(jù)

執(zhí)行更新語句

update test set id = 10 where id = 2;

圖2:更新后的數(shù)據(jù)

更新后數(shù)據(jù)

執(zhí)行新的插入語句

insert test (name) values ('dddd')

圖3:插入的新數(shù)據(jù)

插入新數(shù)據(jù)后

想必這時大家也都看出問題了,更新后可能剛開始沒有問題,但當自增id追上你更新的最大值后,id沖突在所難免了。。。

如何解決

1.如果是個人測試庫,不怎么重要,可以重啟數(shù)據(jù)庫
2.當然線上數(shù)據(jù)庫是沒法按照1這種方式搞了,除非你很任性(還需要dba陪著你任性),,,這時可以嘗試指定id插入一條業(yè)務上無意義的數(shù)據(jù),例如軟刪除的數(shù)據(jù),(我的案列表沒有軟刪除標識,大家可以意會下)

insert test (id,name) values (20,'eeee');

操作后如圖:

指定id插入

在執(zhí)行下面SQL語句,對照結果

insert test (name) values ('ffff');

對照結果

此時自增id已從最大值開始自增了

找資料發(fā)現(xiàn),這個BUG在2005年就被提出了,因為性能以及場景很少的沒有被修復;這個問題在MySQL 8.0.11中表現(xiàn)正常。

到此這篇關于Mysql更新自增主鍵id遇到的問題的文章就介紹到這了,更多相關Mysql更新自增主鍵id內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

密山市| 拉萨市| 墨江| 额敏县| 红安县| 宜兴市| 横山县| 旌德县| 通城县| 商水县| 乐亭县| 南和县| 松原市| 马关县| 洪湖市| 龙州县| 南康市| 沁阳市| 山丹县| 丰县| 巴林右旗| 枣庄市| 巨鹿县| 淮阳县| 会东县| 阳信县| 林芝县| 揭西县| 抚州市| 横山县| 甘肃省| 托里县| 安陆市| 东安县| 洱源县| 奎屯市| 宣化县| 丽江市| 寿阳县| 宁远县| 西华县|