我试图了解 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) 进行更新
?