【发布时间】:2013-05-18 12:10:23
【问题描述】:
我试图了解 innodb 关于重用可能出现在 AUTO_INCREMENT 值序列中的间隙的确切行为。问题是在我看来,我在文档中发现了两个相互矛盾的描述。
在所有锁定模式(0、1 和 2)中,如果生成的事务 自动增量值回滚,那些自动增量值是 “丢失”。一旦为自增列生成了一个值,它 不能回滚,无论“INSERT-like”语句是否 已完成,以及包含的事务是否滚动 背部。此类丢失的值不会被重复使用。
2 。 http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html
当你重新启动 MySQL 服务器时,InnoDB 可能会重用一个旧值 为 AUTO_INCREMENT 列生成但从未存储(即 在滚动的旧事务期间生成的值 返回)。
那么这些丢失的值会被重用吗?如果它们确实会在重新启动 MYSQL 服务器后被重用,那么考虑到 InnoDB 通过执行等效的语句来确定新的 AUTO_INCREMENT 值,这怎么可能
从 t 中选择 MAX(ai_col) 进行更新
?
【问题讨论】: