程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql錯誤:Duplicateentry'127'forkey&am

Mysql錯誤:Duplicateentry'127'forkey&am

編輯:MySQL綜合教程

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

正如我上篇博文中所述,如果一個自增字段達到了上限,而且繼續向裡面插入數據的話會出現 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要獲取自增值然後存儲到緩存的時候,發現找不到更高的數字了。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved