发生插入错误后MySQL自增列增加

Leo*_*ins 5 mysql innodb insert auto-increment

我在我的数据库中做了一些插入测试,我意识到当 INSERT 语句失败时,由于错误 1452,导致 auto_increment 值增加 1。即使在这个语句中没有插入任何行。

因此,此行为导致下一个有效插入跳过 auto_increment 的可用和可能值。

例子:

1st Insert | Result: Success | id(auto_increment_column): 1       |
2nd Insert | Result: Failure | -------- No rows were recorded---- |
3nd Insert | Result: Success | id(auto_increment_column): 3       |
Run Code Online (Sandbox Code Playgroud)

我想知道之前是否有人遇到过这个问题,这是否真的是一个问题。

干杯。

PS:

错误:1452 - fk 约束失败。这意味着我试图引用另一个表中的某个列值,但该值在那里不存在。

  • 数据库:MySQL Ver 14.14 Distrib 5.6.13,适用于 Windows 64 位
  • 存储引擎:InnoDB

Rol*_*DBA 5

关于传统 InnoDB 自动增量锁定的 MySQL 文档的最后一句话说

如果您使用计数器回滚已生成数字的事务,您可能会看到分配给 AUTO_INCREMENT 列的值序列中的间隙。

因此,如果第二次 INSERT 失败并回滚,则会产生间隙。

您可能需要将innodb_autoinc_lock_mode设置为 0 或 2。请阅读有关可配置 InnoDB 自动增量锁定的 MySQL 文档以了解更改innodb_autoinc_lock_mode可以为您做什么。