2011-01-20 11 views
1

私は紙幣を持つテーブルを持っています。私は新しいレコードを挿入した後、すべての請求書はDBから来るIDを持っています。このフィールドは、AUTO_INCREMENTが設定されたINTEGERです。AUTO_INCREMENTプライマリIDを持つMySQLテーブルは、ロールバック後に番号を解放しません。

トランザクションの一部として新しいレコードを挿入し、このトランザクションをロールバックする必要がある場合、そのIDは取得され、削除されます。したがって、このIDは使用されていなくても、次のレコードはIDが1つ上になります。

請求書には線形の番号が付いている方が良いでしょう。何か問題があるかどうかを会計担当者が把握することができます。

答えて

5

並行処理の理由から、自動増分値はトランザクションで「ロールバック」できません。トランザクションが進行中に別のプロセスがレコードを挿入した場合、後でそのIDと衝突する危険性があります。

例として、プロセス「A」のトランザクションがID 1,2および3を取得したとしましょう。別のプロセス「B」が実行され、ID 4およびID 5が取得されます。 "C"は5つのIDを必要とし、1,2,3,4,5を取得するが、4と5はすでにプロセス "B"によって取得されている。

+0

ありがとうございました。私はそれがそれが何であるかと思います:-) – Remy

関連する問題