web-dev-qa-db-ja.com

挿入エラーが発生した後、MySQLの自動インクリメント列が増加する

データベースで挿入テストを行っていましたが、エラー1452が原因でINSERTステートメントが失敗すると、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:

エラー番号:1452-fk制約が失敗します。これは、別のテーブルのいくつかの列の値を参照しようとしているが、この値がそこに存在しないことを意味します。

  • データベース:MySQL Ver 14.14 Distrib 5.6.13、Windows 64ビット用
  • ストレージエンジン:InnoDB

MySQLドキュメントの最後のセンテンス Traditional InnoDB Auto-Increment Locking は言う

カウンターを使用して数値を生成したトランザクションをロールバックすると、AUTO_INCREMENT列に割り当てられた値のシーケンスにギャップが生じることがあります。

したがって、2番目のINSERTが失敗してロールバックされた場合、ギャップが生じます。

innodb_autoinc_lock_mode を0または2に設定しなければならない場合があります。MySQLのドキュメント Configurable InnoDB Auto-Increment Locking を読んで、変更内容 innodb_autoinc_lock_mode を理解してください。あなたのためにしてください。

4
RolandoMySQLDBA