MySQL自增主鍵刪除後重復問題 這是我同事的一個朋友遇到的問題,標題可能有些拗口,我重現下場景: 設置一張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還是會如期自增的。