【问题标题】:MySQL autoincrement problemMySQL自增问题
【发布时间】:2010-07-29 07:43:06
【问题描述】:

我有一个带有自动增量字段的表,例如,我有 1、2、3 值,当我插入 4 并删除它时,下一个通常是 5。我删除 5 并在很长一段时间后,比如说 1 周当我插入新记录 下一个又是 4.

谁能告诉我为什么会发生这种情况,为什么当我在很长一段时间后插入一条新记录时,它得到了该表的最后插入的 id,并且没有考虑到已删除的记录。

PS:这种情况是在很长一段时间后发生的,当我在短时间内这样做时它工作正常

【问题讨论】:

  • 任何 CRON 任务在您的表上运行?
  • 我自己没有启动任何cron,但这是在付费主机上,所以他们可能会进行一些调整?
  • 是否有可能在任何时候备份/恢复数据库,可能缺少或过时的 AUTO_INCREMENT 值?或者,AUTO_INCREMENT 列是多列索引的一部分吗?请参阅Using AUTO_INCREMENT - 特别是关于多列索引的部分。
  • 关于备份我第一次想到,这次没有备份,谢谢第二个想法!

标签: php mysql


【解决方案1】:

表列的最后一个自动增量值仅存储在内存中。它没有写入表格或其他东西。因此,如果您重新启动服务器(即备份),最后一个增量值 (5) 会丢失,mysql 会扫描表以查找表 (4) 中存在的最后一个值。

【讨论】:

  • 是的,你是对的,我不相信它并在localhost上测试过,它是这样的,谢谢,但是有没有解决这个问题的解决方案,在重新启动服务器后保留已删除的ID?
  • 我认为 mysql 触发器、存储过程和最后一个 id 的表的组合可能是一个解决方案。这样您就可以构建自己的 AI 功能。但我以前用 mysql 做过这个。
  • 好的,对于那些会遇到这个问题的人,这只是 InnoDB 表的问题,所以我最简单的解决方案是删除一个新字段,但是这样你应该遍历所有应用程序并更改东西,其他解决方案可能有些粗制滥造,再次感谢问题已解决。顺便说一句,当我阅读文档时,还没有对字段或表格本身进行一些调整的解决方案。
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多