MySQL 自增字段為何出錯

2021-09-01 10:57:19 字數 885 閱讀 7873

**採用php和mysql資料庫開發。一直執行良好。最近,伺服器在一次斷電之後,**的新聞部分,便無法再新增新的內容。檢視**日誌,發現是該錶的自增部分報錯,錯誤如下所示:

duplicate entry 』151473′ for key 『primary』

這種錯誤的產生,由於是計算機的不正常關閉而導致的。檢視該錶,關鍵字段最大值只能到151472。此時,手工增加一條新的記錄,也會報同樣的錯誤。說明自增值151473在mysql的內部已被占用,但是在news表中,該記錄並沒有被保留。

於是,用命令檢視news表當前自增值:

mysql> show table status like 『news』;

發現在列「rows」,其值為151472。

此時,只需要把該值更改大一點,跳過有錯誤的記錄號,便可以了。

mysql>alter table news auto_increment = 151474;

修改完成後,接著在news表中插入新的記錄,一切正常。

以上這種錯誤很少出現,比如,會在作業系統非正常關閉或者mysql資料庫突然結束通話的情況下,才有可能出現。

另一種情況

使用者設定自增字段過小,也會造成以上錯誤的發生,比如,報如下錯誤:

duplicate entry 』127′ for key 『primary』

以上錯誤的原因,是使用者把關鍵字段設定為了tinyint型別,這種型別的資料最大也只能到127,所以會報以上錯誤。

此時修改的方法,是將該自增字段的型別修改為int或bigint。

總之,遇到這種錯誤,首先需要檢視出錯的表,以確定具體的原因,比如是資料庫錯誤導致的,還是因為自增字段型別設定的不正確導致的。然後,採用以上兩種方法具體解決。

mysql 自增字段原理 MySQL自增字段暴增

找了點資料 從網上看到一篇文章,mysql在檢測到表中有損壞的記錄時,會自動修復,為了保證資料的完整性,mysql會以空格 0x20 寫進磁碟來完成修復。根據欄位的型別,自增字段的長度不同,所允許的最大值也不同。見下 int 10 unsigned型別最大值十進位制為4294967295,十六進製制...

Mysql自增字段

1.關鍵字 auto increment 2.自增用法 例 create table animals id mediumint not null auto increment,name char 30 not null,primary key id 3.關於自增 q 怎麼獲得當前的自增的最大值?q ...

mysql自增字段重排

由於刪除了某些記錄行,所以自增字段不連續了。重排或歸零的方法 方法1 truncate table 你的表名 這樣不但重新定位自增的字段,而且會將表裡的資料全部刪除,慎用!方法2 delete from 你的表名 dbcc checkident 你的表名,reseed,0 重新定位自增的字段,讓它從...