ホームページ > データベース > mysql チュートリアル > SQL Server ID (自動インクリメント) はトランザクションのロールバック後もインクリメントされ続けますか?

SQL Server ID (自動インクリメント) はトランザクションのロールバック後もインクリメントされ続けますか?

Patricia Arquette
リリース: 2025-01-13 22:53:48
オリジナル
973 人が閲覧しました

Does SQL Server Identity (Auto-Increment) Continue Incrementing After a Transaction Rollback?

トランザクション ロールバック後の SQL Server 自動インクリメント列の増分動作: 問題ではありません

.NET トランザクションが、自動インクリメント主キーを使用して SQL Server 2005 データベースにデータを挿入するとします。 Rollback() メソッドは、トランザクション内でエラーが発生した場合、行挿入操作を正しくロールバックします。ただし、同じテーブルへの後続の挿入では、ロールバックが発生しなかったかのように自動インクリメント列がインクリメントされ、シーケンスにギャップが生じます。

自動インクリメント機能を理解する

自動インクリメント数値の設計は非トランザクションであることを理解することが重要です。この設計の理論的根拠は、他のトランザクションが続行する前に、増分された数値の消費またはロールバックを待機する必要がある場合、ブロックが発生する可能性があるということです。

これを説明するために、ユーザー 1 とユーザー 2 が ID 列として自動インクリメント フィールドを使用してテーブル A と対話する次のシナリオを考えてみましょう。

<code>用户 1
------------
begin transaction
insert into A ...
insert into B ...
update C ...
insert into D ...
commit

用户 2
-----------
begin transaction
insert into A ...
insert into B ...
commit</code>
ログイン後にコピー

ユーザー 2 のトランザクションがユーザー 1 のトランザクションの後で発生した場合、ほんの少し遅れても、テーブル A への挿入操作は、初めてテーブル A から行われたものであることを確認するために、ユーザー 1 のトランザクション全体が完了するまで待機する必要があります。挿入された自動インクリメント番号が使用されるかどうか。

結論

したがって、トランザクションがロールバックされた後も自動インクリメント列がインクリメントを続ける動作はエラーではなく、意図的に設計された戦略です。正確に連続的に増加する数値が必要な場合は、そのような値を生成するために他のメカニズムを考慮する必要があります。

以上がSQL Server ID (自動インクリメント) はトランザクションのロールバック後もインクリメントされ続けますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート