【问题标题】:How to NOT recycle auto_increment IDs in InnoDB如何在 InnoDB 中不回收 auto_increment ID
【发布时间】:2012-04-28 09:28:47
【问题描述】:

我最近read 表示由于 InnoDB 在服务器重新启动时如何重新计算 AUTO_INCREMENT 值,ID 列表高端的任何记录都可能被重用其 ID。

通常,这不是问题,因为当用户被删除时,与该 ID 关联的所有内容也会从其他表中删除。

但我故意让他们的论坛帖子成为孤立的,标记为“由 =User #123= 发布”,以便保留过去的对话。显然,如果一个 ID 被重复使用,这将是一个问题。

我以前从未遇到过这个问题,因为总是有足够多的新用户,因此不太可能以这种方式重复使用 ID。然而,在我的新项目中,注册很少见,并且经常删除非活动用户(特别是因为“开放 Alpha”帐户仅持续三天作为预览),并且这种 ID 重用现在已经发生了三对三。

我通过在别处保存AUTO_INCREMENT 的正确值并使用它而不是依赖内部值来“解决”这个问题。有没有一种方法可以让 InnoDB 记住实际的最后一个值?

【问题讨论】:

  • 与其删除账户记录,不如直接清除,改名为“user #11”,并在上面设置一个“deleted”标志?然后,您可以保持参照完整性(并且可以使用 FK),而不必担心 ID 会被重复使用。

标签: mysql innodb auto-increment


【解决方案1】:

5.5 文档建议将自动增量值存储在您已有的其他位置。

另一种解决方案是模拟 SEQUENCE,这样您就不会在实际表本身中使用自动增量。这是discussed on SO beforeagainMYSQL Performance blog mentions it

又一个 MySQL 数据搞砸了其他 RDBMS 没有...

【讨论】:

猜你喜欢
  • 2013-12-11
  • 2015-10-12
  • 2013-06-28
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2014-08-17
  • 2023-01-13
相关资源
最近更新 更多