2010-07-29 66 views
1

我有一个表与自动增量字段,我有例如1,2,3的值,当我插入4并删除它,下一个通常会是5.我删除5和很长时间后,说1当我插入新纪录时,下一个是再次4.MySQL的自动增量问题

有人可以告诉我为什么会发生这种情况,为什么当我长时间插入一个新的记录后,它获取该表的最后一个插入的ID,并没有采取考虑删除的记录。

PS:出现这种情况只是时间长了以后,它正在确定,当我在时间

+3

任何运行在您的表上的CRON任务? – 2010-07-29 07:45:27

+0

我自己并没有启动任何cron,但是这是在付费托管,所以他们可能会做出一些调整? – Centurion 2010-07-29 07:48:52

+1

是否有可能在任何时候备份/恢复数据库,可能是缺少或过期的AUTO_INCREMENT值?或者,是多列索引的AUTO_INCREMENT列部分?请参阅[使用AUTO_INCREMENT](http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html) - 具体地说,关于多列索引的部分。 – Mike 2010-07-29 08:06:49

回答

5

一个表列的最后一个自动递增值仅存储在内存中短期内这样做。它不写入表格或其他东西。因此,如果您重新启动服务器(即进行备份),最后一个增量值(5)将丢失,并且mysql会扫描该表以查找表(4)中存在的最后一个值。

+0

是的,你是对的,我不相信它,并在本地主机上测试,它是这样的,谢谢,但有没有解决这个问题,以重新启动服务器后保持删除id? – Centurion 2010-07-29 09:01:04

+2

我认为mysql触发器,存储过程和最后一个表的一个组合可能是一个解决方案。这样你就可以建立你自己的ai功能。但是我之前用mysql更新过。 – shod 2010-07-29 09:44:23

+0

好吧,对于那些遇到这个问题的人来说,这只是InnoDB表的问题,所以我最简单的解决方案是删除一个新的字段,但这样你应该通过所有的应用程序和改变的东西,其他的解决方案可能是一些鞋,再次感谢问题解决。 顺便说一下,当我阅读文档时,还没有对字段或表本身进行一些调整的解决方案。 – Centurion 2010-07-29 09:51:52