91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決Mysql更新自增主鍵id遇到的問題

發布時間:2021-11-30 17:32:42 來源:億速云 閱讀:463 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何解決Mysql更新自增主鍵id遇到的問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何解決Mysql更新自增主鍵id遇到的問題”這篇文章吧。

為什么要更新自增id

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

問題

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

圖1:更新前原始數據

如何解決Mysql更新自增主鍵id遇到的問題

執行更新語句

update test set id = 10 where id = 2;

圖2:更新后的數據

如何解決Mysql更新自增主鍵id遇到的問題

執行新的插入語句

insert test (name) values ('dddd')

圖3:插入的新數據

如何解決Mysql更新自增主鍵id遇到的問題

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

如何解決

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

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

操作后如圖:

如何解決Mysql更新自增主鍵id遇到的問題

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

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

如何解決Mysql更新自增主鍵id遇到的問題

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

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

以上是“如何解決Mysql更新自增主鍵id遇到的問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德江县| 扎兰屯市| 田东县| 淮阳县| 贵南县| 海城市| 鄂托克前旗| 澳门| 凌海市| 隆尧县| 江城| 乌鲁木齐市| 类乌齐县| 西畴县| 南平市| 朝阳县| 剑河县| 安陆市| 谢通门县| 会昌县| 临夏市| 平度市| 武功县| 东海县| 曲阜市| 吐鲁番市| 阜宁县| 旺苍县| 且末县| 兰坪| 江山市| 铁力市| 广宁县| 鄂州市| 晋宁县| 永德县| 宾川县| 固始县| 嘉兴市| 无极县| 恭城|