SQL Server 分離レベル: コミットされた読み取りと反復可能な読み取りの違い
SQL Server のコミット読み取り分離レベルと反復読み取り分離レベルは、一見すると似ているように見えますが、大きな違いがあります。
コミットされた読み取り
Read Committed は、トランザクションによって読み取られたデータが読み取られたときに確実にコミットされるようにします。これにより、トランザクションが「ダーティ データ」、つまりコミットされていないトランザクション中に中間状態にあったデータを認識するのを防ぎます。ただし、コミットされた読み取りは、その後の同じデータの読み取りで同じ値が返されることを保証しません。他のトランザクションは、最初のトランザクションが完了する前に読み取られたデータを変更または削除することができます。
例:
- トランザクション A は値「1」の行を読み取ります。
- トランザクション B は同じ行を「2」に更新し、コミットします。
- トランザクション A がコミット前に行を再読み取る場合、時間に応じて古い値 ('1') または新しい値 ('2') が表示される可能性があります。
反復読み取り
反復可能な読み取りにより、より高いレベルの分離が提供され、以下が保証されます。
- トランザクション中に読み取られたデータは、最初のトランザクションがコミットされるまでは、他のトランザクションによって変更または削除できません。
- 最初のトランザクションがコミットされていない限り、同じデータの後続の読み取りでは同じ値が返されます。
例:
- トランザクション A は値「1」の行を読み取ります。
- トランザクション B は同じ行を更新しようとしますが、トランザクション A がコミットするまでブロックされます。
- トランザクション A が行を再読み取りすると、コミットするまで常に同じ値 (「1」) が表示されます。
概要
- コミットされた読み取りは「ダーティ読み取り」を防止しますが、後続の読み取りの一貫性は保証されません。
- 反復可能な読み取りにより、後続の読み取りの一貫性が確保され、最初のトランザクションがコミットされる前に読み取られたデータが他のトランザクションによって変更されるのを防ぎます。
- 分離レベルを高くすると、データの一貫性がより強力に保証されますが、同時実行性とパフォーマンスが低下する可能性があります。
以上がSQL Server 分離レベル: コミット読み取りと反復読み取りの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。