Mysql錯誤:Duplicate entry '127' for key 'PRIMARY'的解決方法

有時候真是挺幸運,正當我自以爲是地認爲掌握了某個知識點的時候,現實就會馬上出現另外一個問題,讓我知道之前的認知是不全面的。

正如我上篇博文中所述,如果一個自增字段達到了上限,而且繼續向裏面插入數據的話會出現 Failed to read auto-increment value from storage engine 的提示。但是今天遇到了另一個錯誤提示:Duplicate entry '127' for key 'PRIMARY',經過排查同樣是因爲自增字段達到了上限。那爲什麼同一個問題會出現不同的提示呢?

測試結果是這樣的:

1、如果這個時候數據表裏面沒有數據,而且我們用使用 INSERT INTO VALUES 這樣的語句插入,就會提示 Duplicate entry '127' for key 'PRIMARY' 這類的字樣。(因爲我設置的測試字段是tinyint,所以是127)

2、如果這個時候數據表裏面沒有數據,而且我們使用 INSERTINTO SELECT FROM 這樣的語句插入,並且存儲引擎是INNODB的話,就會提示 Failed to read auto-increment value from storage engine  這樣的錯誤;

3、如果這個時候數據表裏面有數據,則總是會出現Duplicate entry '127' for key 'PRIMARY' 這類的字樣的錯誤。

所以,出現Duplicate entry '127' for key 'PRIMARY' 這個時容易理解的。而另外一個提示是因爲INNODB 引擎特有的二級緩存所導致的。數據不會先插入數據表,而會先存到緩存裏面,只是增加表裏的自增數。所以當自增數達到極限時,InnoDB要獲取自增值然後存儲到緩存的時候,發現找不到更高的數字了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章