一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - Mysql更新自增主鍵id遇到的問題

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

2022-01-12 18:19code1Boy Mysql

本文主要介紹了Mysql更新自增主鍵id遇到的問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

為什么要更新自增id

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

問題

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

圖1:更新前原始數據

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

執行更新語句

?
1
update test set id = 10 where id = 2;

圖2:更新后的數據

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

執行新的插入語句

?
1
insert test (name) values ('dddd')

圖3:插入的新數據

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

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

如何解決

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

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

操作后如圖:

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

在執行下面sql語句,對照結果

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

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

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

找資料發現,這個bug在2005年就被提出了,因為性能以及場景很少的沒有被修復;這個問題在mysql 8.0.11中表現正常。

到此這篇關于mysql更新自增主鍵id遇到的問題的文章就介紹到這了,更多相關mysql更新自增主鍵id內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/code1Boy/article/details/121589152

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费一级欧美大片在线观看 | 9lporm自拍视频在线 | 日韩一级欧美一级一级国产 | 羞羞视频麻豆 | 无码任你躁久久久久久久 | 亚洲欧美自偷自拍另类小说 | 天天天做天天天天爱天天想 | 久久久久久久伊人电影 | 亚洲男女网站 | 四虎影视入口 | 日韩在线观看一区二区不卡视频 | 成人涩涩屋福利视频 | 亚洲人成毛片线播放 | 国产精品日韩欧美在线 | 紧身牛仔裤美女被啪啪久久网 | 男人在女人下面狂躁 | 欧美日韩国产精品自在自线 | 日韩精品成人a在线观看 | 国产第2页| 挺进白嫩老师下面视频 | 热国产热综合 | 男人香蕉好大好爽视频 | 性做久久久久久久久浪潮 | 美女机机对机机的视频(免费) | 亚洲激情婷婷 | 精品国产欧美一区二区三区成人 | 国产自在线拍 | 91精品免费国产高清在线 | 妇伦小说 | 日本中文字幕在线观看视频 | 鄂州一家三口完整版免费 | 女王厕便器vk | juy_661佐佐木明希在线播放 | 国产成人免费高清激情明星 | 91果冻制片厂天美传媒 | 国产女王女m视频vk 国产农村一级特黄α真人毛片 | 精品一成人岛国片在线观看 | 动漫人物差差差动漫人物免费观看 | 久久精品热在线观看30 | 美女污视频在线观看 | 美女毛片视频 |