MySQL自增主键重复的问题

By , 2010/09/23 - 13,114 views

首先我们来看看这个问题(我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

只有 1 条评论哦,你来加上一条精彩的吧!

  1. Star说道:

    不错,不错。哈哈。

请您评论

 

健康游戏忠告:抵制不良游戏 拒绝盗版游戏 注意自我保护 谨防受骗上当 适度游戏益脑 沉迷游戏伤身 合理安排时间 享受健康生活
W3C 标准
[Valid RSS]
Valid XHTML 1.0 Transitional
Valid CSS!
分享
E:时间已做了选择 什么人叫做朋友 偶尔碰头 心情却能一点就通
H:因为我们曾有过 理想类似的生活 太多感受 绝非三言两语能形容
S:可能有时我们顾虑太多 太多决定需要我们去选择 担心会犯错 难免会受挫 幸好一路上有你陪我
合:与你分享的快乐 胜过独自拥有 至今我仍深深感动
好友如同一扇窗 能让视野不同 与你分享的快乐 胜过独自拥有 至今我仍深深感动 好友如同一扇门 让世界(变)开阔

无觅相关文章插件,快速提升流量