SQL Server ID 列のギャップ: ロールバック後の値の再利用
SQL Server の ID 列は、新しいテーブル行ごとに一意の連続番号を自動的に生成します。 ただし、ID 列への挿入に続くトランザクションのロールバックでは、シーケンスにギャップが残り、未使用の番号が生じる可能性があります。
疑問が生じます: ロールバック後にこれらのギャップを回復できるでしょうか? 答えはノーです。 ID 値をトランザクションにすると、同時実行性に重大な影響が生じ、他のトランザクションに重大なパフォーマンスのボトルネックが発生します。
トランザクションが複数の行を挿入し、その後エラーのためにロールバックした場合、割り当てられた ID 値は自動的には再利用されません。これは、将来の挿入のためのシーケンス内のギャップに直接つながります。
一貫性のあるギャップのない連続番号付けを維持するには、代替の自動番号付け戦略を利用することをお勧めします。 これらには、専用のシーケンス テーブル、または一意のシーケンス識別子の生成と管理を担当する別個のサービスが含まれる場合があります。 このアプローチは、トランザクション シナリオにおける SQL Server の ID 列の制限を回避します。
以上がSQL Server はトランザクションのロールバック後に ID シーケンスのギャップを再利用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。