InnoDB中的Auto_increment值?

Tim*_*mmy 8 mysql innodb

我一直在使用InnoDB进行项目,并依赖于auto_increment.对于大多数表来说这不是问题,但对于删除表,这可能是一个问题:

AUTO_INCREMENT在InnoDB中处理

特别是这部分:

名为ai_col的AUTO_INCREMENT列:服务器启动后,对于第一次插入表t,InnoDB执行相当于此语句:SELECT MAX(ai_col)FROM t FOR UPDATE; InnoDB将语句检索的值递增1,并将其分配给列和表的自动递增计数器.

这是一个问题,因为虽然它确保在表中,键是唯一的,但是这个表的外键不再是唯一的.

mysql服务器经常/不应该经常重启,但这是破坏.这有什么简单的方法吗?

Ken*_*Fox 5

如果有外键约束,当表 B 引用该行时,如何从表 A 中删除该行?这对我来说似乎是一个错误。

无论如何,您可以通过在应用程序启动备份时重置偏移量来避免重复使用自动增量值。查询引用表 A 的所有表中的最大值,然后将表更改为高于该最大值,例如,如果最大值为 989,请使用以下命令:

alter table TableA auto_increment=999;
Run Code Online (Sandbox Code Playgroud)

还要注意不同的 MySQL 引擎有不同的自动增量行为。这个技巧适用于 InnoDB。