Mysql字段自增,通常用于表的主鍵,用來確保每次插入一條新數(shù)據(jù)的時候,該列的值在表中是一個唯一值,該字段通常設(shè)置為主鍵+自增,PRIMARY KEY (ID) AUTO_INCREMENT。
但是今天在重啟一個之前的功能的時候,竟然報錯了。這個表之前是記錄用戶的操作記錄的一個LOG表,內(nèi)容很多很長,中間有一段時間已經(jīng)不用了因為占用空間和影響效率,最近想要重新開始繼續(xù)記錄用戶的操作記錄,結(jié)果就是重啟之后,插入log記錄的時候就報錯了:Duplicate entry for key 'PRIMARY' .這段報錯的意思就是主鍵id重復(fù)了。當(dāng)時就有點懵,因為我記得是沒有指定主鍵id的值,應(yīng)該是自增,咋會報這個錯。
知道報錯的原因,那么解決這個報錯的思路就很清晰了,我們可以有多種方式來解決:
1、如果是在寫入的時候指定了id的值,那么我們就應(yīng)該是不指定id的值,讓mysql自動處理自增。
2、重置自增字段,使用alter table重置自增字段。
3、使用insert ignore來忽略重復(fù)的插入操作,改成更新內(nèi)容
但是,我這個情況好像不在其中。因為我沒有指定id,但是我也不想通過ignore來忽略這個報錯,我覺得可能是表的問題,我決定修復(fù)一下表結(jié)構(gòu)。在mysql中,我們可以使用repair table 來修復(fù) myisam 和 innodb類型的表,mysql還提供check table來檢測表是否存在錯誤或者損壞。
在我執(zhí)行了repair table修復(fù)表之后,在測一測是否可以正常插入新數(shù)據(jù)的時候就發(fā)現(xiàn)可以正常寫入數(shù)據(jù)了。所以在我們遇到這種報錯的時候,如果我門的代碼沒有問題的時候,可以check table來檢測一下表時候有問題,并且使用repair table來修復(fù)表嘗試是否可以解決問題。