欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

為什么要更新自增id

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

問題

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

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

如何解決

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

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

操作后如圖:

指定id插入

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

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

對照結(jié)果

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

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

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

相關(guān)文章

  • MySQL?字符串日期格式轉(zhuǎn)換的幾種方法

    MySQL?字符串日期格式轉(zhuǎn)換的幾種方法

    MySQL經(jīng)常需要將字符串類型的日期轉(zhuǎn)換成日期或時間類型,本文主要介紹了MySQL?字符串日期格式轉(zhuǎn)換的幾種方法,包括使用STR_TO_DATE()和DATE_FORMAT()函數(shù),具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • 幾個常見的MySQL的可優(yōu)化點歸納總結(jié)

    幾個常見的MySQL的可優(yōu)化點歸納總結(jié)

    這篇文章主要介紹了幾個常見的MySQL的可優(yōu)化點歸納總結(jié),包括在編程時處理索引、分頁以及數(shù)據(jù)類型時可用到的地方,需要的朋友可以參考下
    2015-05-05
  • 超簡單的qps統(tǒng)計方法(推薦)

    超簡單的qps統(tǒng)計方法(推薦)

    下面小編就為大家?guī)硪黄唵蔚膓ps統(tǒng)計方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • MySQL中Join的算法(NLJ、BNL、BKA)詳解

    MySQL中Join的算法(NLJ、BNL、BKA)詳解

    這篇文章主要介紹了MySQL中Join的算法(NLJ、BNL、BKA)詳解,Join是MySQL中最常見的查詢操作之一,用于從多個表中獲取數(shù)據(jù)并將它們組合在一起,本文將探討這兩種算法的工作原理,以及如何在MySQL中使用它們
    2023-07-07
  • mysql5.7.14解壓版的安裝圖文教程

    mysql5.7.14解壓版的安裝圖文教程

    MySQL的安裝有兩種方式,一種為msi格式,一個是zip格式。這篇文章主要介紹了mysql5.7.14解壓版的安裝圖文教程,需要的朋友可以參考下
    2017-05-05
  • mysql 月份查詢該月有付款的數(shù)據(jù)

    mysql 月份查詢該月有付款的數(shù)據(jù)

    mysql選擇月份查詢該月有付款的數(shù)據(jù)(間隔x月并提前5天付款)
    2010-04-04
  • mysql非主鍵自增長用法實例分析

    mysql非主鍵自增長用法實例分析

    這篇文章主要介紹了mysql非主鍵自增長用法,結(jié)合實例形式分析了MySQL非主鍵自增長的基本設(shè)置、使用方法與操作注意事項,需要的朋友可以參考下
    2020-02-02
  • MYSQL造數(shù)據(jù)占用臨時表空間的解決方法

    MYSQL造數(shù)據(jù)占用臨時表空間的解決方法

    在MySQL中,臨時表空間并不是一個可以直接刪除的文件或目錄,因為臨時表空間通常是由MySQL服務(wù)器在運行時根據(jù)需要自動創(chuàng)建和管理的,這篇文章主要介紹了MYSQL造數(shù)據(jù)占用臨時表空間,需要的朋友可以參考下
    2024-05-05
  • linux下mysql鏈接被防火墻阻止的解決方法

    linux下mysql鏈接被防火墻阻止的解決方法

    linux下安裝了mysql,不能從其它機(jī)器訪問 帳號已經(jīng)授權(quán)從任意主機(jī)進(jìn)行訪問
    2012-07-07
  • mysqldump你可能不知道的參數(shù)

    mysqldump你可能不知道的參數(shù)

    這篇文章主要介紹了mysqldump你可能不知道的參數(shù),幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11

最新評論