MySQL自增主鍵刪除後重複問題

2021-06-14 11:20:48 字數 950 閱讀 3497

這是我同事的乙個朋友遇到的問題,標題可能有些拗口,我重現下場景:

設定一張mysql表,表裡有乙個自增主鍵id,往表裡插入資料,假如插入資料之後表最後一行的id是100,我先刪除這條id為100的記錄,然後重新啟動伺服器,按理說如果再往這個表裡插入新的記錄,新紀錄的id將為101,對吧?估計大家都是這麼想的,但是,結果是:如果你的表型別是innodb,那麼,新紀錄的id為100;如果你的表型別是myisam,那麼,新紀錄的id為101。但是,如果我們在刪除了id為100的紀錄,但是沒有重新啟動伺服器的條件下,再新增一條新紀錄,新紀錄的自增id都為101。

為什麼會出現這種現象?

這是由於不同的表型別儲存自增id的地方不同:innodb型別的資料表將表最後的id值儲存在記憶體裡面。所以,當我們重新啟動伺服器後,記憶體裡面的資料清空,那麼自增的id將重新按照現有表的紀錄計算;相反,如果是myisam型別的資料表,將最大紀錄id保持在檔案裡,這樣,雖然,重啟了伺服器,下次插入新紀錄的時候,自增id通過讀取檔案而計算得到。

如何解決這個問題?

相信大家都能想到的辦法就是:不重啟伺服器。但是,有些情況下,不得不重啟下伺服器,由於伺服器很長時間高速運轉必須重新啟動一下。也有朋友會回答,將表結構都設定為myisam型別,只要是在不影響現有業務的前提下,都是可行的。這裡,我分享下我的方法:我的方法很簡單,其實,我們壓根就沒有必要說刪除那些記錄,很多情況下,我們設定的表自增id是沒有多大意義的,那麼,我們可以在表結構新增加乙個欄位來標示這條記錄是否有效,如status欄位,1表示有效,0表示失效,如果,不希望看到哪些記錄,只要將這些記錄的status字段值設定為0即可,下次新增記錄id還是會如期自增的。

說在最後:本人是瘋狂的程式設計圖書收藏者,www.codejia.net 個人收藏屋,金屋藏嬌於此。這篇文章裡遇到的問題可能很多人不曾遇到過,事實上這類事情很少會遇到的,但是,了解了總是有好處的。

MySQL自增主鍵刪除後重複問題

mysql自增主鍵刪除後重複問題 這是我同事的乙個朋友遇到的問題,標題可能有些拗口,我重現下場景 設定一張mysql表,表裡有乙個自增主鍵id,往表裡插入資料,假如插入資料之後表最後一行的id是100,我先刪除這條id為100的記錄,然後重新啟動伺服器,按理說如果再往這個表裡插入新的記錄,新紀錄的i...

mysql 主鍵自增語句 MySQL 自增主鍵

以下僅考慮 innodb 儲存引擎。自增主鍵有兩個性質需要考慮 單調性每次插入一條資料,其 id 都是比上一條插入的資料的 id 大,就算上一條資料被刪除。連續性插入成功時,其資料的 id 和前一次插入成功時資料的 id 相鄰。自增主鍵的單調性 為何會有單調性的問題?這主要跟自增主鍵最大值的獲取方式...

MySQL設定主鍵自增和非主鍵自增

mysql 每張表只能有1個自動增長字段,這個自動增長字段即可作為主鍵,也可以用作非主鍵使用,但是請注意將自動增長字段當做非主鍵使用時必須必須為其新增唯一索引,否則系統將會報錯。例如 將自動增長字段設定為主鍵 create table t1 id int auto increment primary...