Mysql字段自增,通常用于表的主键,用来确保每次插入一条新数据的时候,该列的值在表中是一个唯一值,该字段通常设置为主键+自增,PRIMARY KEY (ID) AUTO_INCREMENT。
但是今天在重启一个之前的功能的时候,竟然报错了。这个表之前是记录用户的操作记录的一个LOG表,内容很多很长,中间有一段时间已经不用了因为占用空间和影响效率,最近想要重新开始继续记录用户的操作记录,结果就是重启之后,插入log记录的时候就报错了:Duplicate entry for key 'PRIMARY' .这段报错的意思就是主键id重复了。当时就有点懵,因为我记得是没有指定主键id的值,应该是自增,咋会报这个错。
知道报错的原因,那么解决这个报错的思路就很清晰了,我们可以有多种方式来解决:
1、如果是在写入的时候指定了id的值,那么我们就应该是不指定id的值,让mysql自动处理自增。
2、重置自增字段,使用alter table重置自增字段。
3、使用insert ignore来忽略重复的插入操作,改成更新内容
但是,我这个情况好像不在其中。因为我没有指定id,但是我也不想通过ignore来忽略这个报错,我觉得可能是表的问题,我决定修复一下表结构。在mysql中,我们可以使用repair table 来修复 myisam 和 innodb类型的表,mysql还提供check table来检测表是否存在错误或者损坏。
在我执行了repair table修复表之后,在测一测是否可以正常插入新数据的时候就发现可以正常写入数据了。所以在我们遇到这种报错的时候,如果我门的代码没有问题的时候,可以check table来检测一下表时候有问题,并且使用repair table来修复表尝试是否可以解决问题。