MySQL自增主键重复的问题
首先我们来看看这个问题(我Google来的):一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15?
我直到今天才知道MySQL有这个问题,竟然是在检查项目出错的原因时发现的(太杯具~~了)。我的项目里有一张当前数据表和一张历史数据表,历史数据表里的数据即是从当前数据表里删掉的数据(完全拷贝,包括主键)。今天测试时,发现历史记录表里无法写入记录,提示“Invalid Query : Duplicate entry ‘152′ for key 1 ”
经过一番搜索,终于找到了问题所在。为了能够处理事务,这2张表的类型都是InnoDB,而InnoDB把自增主键的最大ID记录在内存里,今天我在测试之前重启了服务器(如果没重启,这个问题以后再爆发就惨了,启启更健康~ :mrgreen:,MySQL重启后InnoDB会把AUTO_INCREMENT会变成max(id)+1。如果不使用事务的话还是用MyISAM吧,MyISAM把自增主键的最大ID记录到数据文件里,重启MySQL后,自增主键的最大ID也不会丢失。
好了,之前提出的问题现在也可以回答了:
如果表的类型是MyISAM,那么是18。
如果表的类型是InnoDB,那么是15。
最后,如果用InnoDB类型的表,这个问题要怎么解决呢?这个我还不知道,要是解决了我会更新这篇文章的。
本文如无特别说明,均属原创,转载请注明出处!
原文链接:http://iiu.me/archives/119
不错,不错。哈哈。