Mysql更新自增主鍵id遇到的問(wèn)題
本是一個(gè)自己知道的問(wèn)題,還是差點(diǎn)踩坑(差點(diǎn)忘了,還好上線前整理上線點(diǎn)時(shí)想起來(lái)了),特此記錄下來(lái)
為什么要更新自增id
我是因?yàn)闅v史業(yè)務(wù)上的坑,導(dǎo)致必須更新一批id,且為了避免沖突需要將id擴(kuò)大多少倍進(jìn)行更新,因?yàn)槲疫@個(gè)表的數(shù)據(jù)數(shù)量不高,屬于高讀低寫的情況,所以就簡(jiǎn)單的擴(kuò)大了1000
問(wèn)題
MySQL中如果我們把自增主鍵更新為更大的值(例如現(xiàn)在自增id最大值是1000,你更新id=49這個(gè)記錄到id=1049),MySQL并不會(huì)把表的自增值修改為更新后的值,在某些情況下,如DDL,重啟等之后,業(yè)務(wù)開始報(bào)錯(cuò),這時(shí)如果不知道當(dāng)前操作可能會(huì)誤認(rèn)為是當(dāng)前業(yè)務(wù)操作的問(wèn)題,實(shí)則是因?yàn)楦耰d埋下的坑(主鍵沖突)
如下圖:
圖1:更新前原始數(shù)據(jù)
執(zhí)行更新語(yǔ)句
update test set id = 10 where id = 2;
圖2:更新后的數(shù)據(jù)
執(zhí)行新的插入語(yǔ)句
insert test (name) values ('dddd')
圖3:插入的新數(shù)據(jù)
想必這時(shí)大家也都看出問(wèn)題了,更新后可能剛開始沒(méi)有問(wèn)題,但當(dāng)自增id追上你更新的最大值后,id沖突在所難免了。。。
如何解決
1.如果是個(gè)人測(cè)試庫(kù),不怎么重要,可以重啟數(shù)據(jù)庫(kù)
2.當(dāng)然線上數(shù)據(jù)庫(kù)是沒(méi)法按照1這種方式搞了,除非你很任性(還需要dba陪著你任性),,,這時(shí)可以嘗試指定id插入一條業(yè)務(wù)上無(wú)意義的數(shù)據(jù),例如軟刪除的數(shù)據(jù),(我的案列表沒(méi)有軟刪除標(biāo)識(shí),大家可以意會(huì)下)
insert test (id,name) values (20,'eeee');
操作后如圖:
在執(zhí)行下面SQL語(yǔ)句,對(duì)照結(jié)果
insert test (name) values ('ffff');
此時(shí)自增id已從最大值開始自增了
找資料發(fā)現(xiàn),這個(gè)BUG在2005年就被提出了,因?yàn)樾阅芤约皥?chǎng)景很少的沒(méi)有被修復(fù);這個(gè)問(wèn)題在MySQL 8.0.11中表現(xiàn)正常。
到此這篇關(guān)于Mysql更新自增主鍵id遇到的問(wèn)題的文章就介紹到這了,更多相關(guān)Mysql更新自增主鍵id內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql-8.0.15-winx64 使用zip包進(jìn)行安裝及服務(wù)啟動(dòng)后立即關(guān)閉問(wèn)題
這篇文章主要介紹了mysql 使用zip包進(jìn)行安裝以及服務(wù)啟動(dòng)后立即關(guān)閉問(wèn)題 ,本實(shí)例使用的mysql版本為mysql-8.0.15-winx64,需要的朋友可以參考下2019-05-05MySQL特定表全量、增量數(shù)據(jù)同步到消息隊(duì)列-解決方案
mysql要同步原始全量數(shù)據(jù),也要實(shí)時(shí)同步MySQL特定庫(kù)的特定表增量數(shù)據(jù),同時(shí)對(duì)應(yīng)的修改、刪除也要對(duì)應(yīng),下面就為大家分享一下2021-11-11mysql設(shè)置某字段不能重復(fù)問(wèn)題
這篇文章主要介紹了mysql設(shè)置某字段不能重復(fù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08MySQL統(tǒng)計(jì)高頻用戶實(shí)現(xiàn)方法詳解
這篇文章主要介紹了MySQL統(tǒng)計(jì)高頻用戶實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼講解了如何用SQL實(shí)現(xiàn)數(shù)據(jù)清洗、分組聚合與排序,識(shí)別高頻用戶,用于活躍度分析和異常檢測(cè),需要的朋友可以參考下2025-05-05mysql5.7.14 解壓版安裝配置方法圖文教程(win10)
這篇文章主要為大家詳細(xì)介紹了win10下mysql5.7.14 winx64安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12mysql中索引與FROM_UNIXTIME的問(wèn)題
這篇文章主要介紹了mysql中索引與FROM_UNIXTIME的問(wèn)題的相關(guān)資料,需要的朋友可以參考下2017-05-05