1. 程式人生 > >Mysql錯誤:Duplicate entry '127' for key 'PRIMARY'的解決方法

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要獲取自增值然後儲存到快取的時候,發現找不到更高的數字了。