Mysql

發生插入錯誤後MySQL自動增量列增加

  • November 1, 2020

我在我的數據庫中進行了一些插入測試,我意識到當 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       |

我想知道以前是否有人遇到過這個問題,以及這是否真的是一個問題。

乾杯。

PS:

Errno:1452 - fk 約束失敗。這意味著我正在嘗試引用另一個表中的某些列值,並且該值不存在那裡。

  • 數據庫:MySQL Ver 14.14 Distrib 5.6.13,適用於 Windows 64 位
  • 儲存引擎:InnoDB

關於傳統 InnoDB 自動增量鎖定的 MySQL 文件的最後一句話說

如果您使用計數器回滾已生成數字的事務,您可能會在分配給 AUTO_INCREMENT 列的值序列中看到間隙。

因此,如果第二個 INSERT 失敗並回滾,則會產生間隙。

您可能必須將innodb_autoinc_lock_mode設置為 0 或 2。請閱讀有關可配置 InnoDB 自動增量鎖定的 MySQL 文件以了解更改innodb_autoinc_lock_mode可以為您做什麼。

引用自:https://dba.stackexchange.com/questions/101320