コミットされていないものを読む
- 1つのトランザクションでデータが変更されている場合、このデータの選択(他のトランザクションまたはトランザクションなし)は、最初のトランザクションが終了するまで待機せず、コミットされていないトランザクションのデータエントリを返します。
- 1つのトランザクションでデータが読み取られている場合、他のトランザクションでのこのデータの更新は、最初のトランザクションが終了するまで待機しません。
- 共有ロックは使用されません。 設定と同じ t 彼 NOLOCK ヒント ReadCommittedのすべての選択。
- 排他的ロックは、ステートメントの実行中に有効になり、最後に無効になります f トランザクション 。
コミット済みの読み取り+read_committed_snapshotoff
(alter database xxx set read_committed_snapshot off)
- 1つのトランザクションでデータが変更されている場合、このデータの選択(他のトランザクションまたはトランザクションなし)は、最初のトランザクションが終了するまで待機します。 セレ ct with NOCHECK ヒント 変更されたがコミットされていないデータを返します。
- 1つのトランザクションでデータが読み取られている場合、他のトランザクションでのこのデータの更新は、最初のトランザクションが終了するまで待機しません。
- 共有ロックは、ステートメントの実行中に有効になり、状態の終了時に無効になります 実行しない 。
- 排他的ロックは、ステートメントの実行中に有効になり、トランザクションの終了時に無効になります 。
Read Committed + read_committed_snapshot on
(alter database xxx set read_committed_snapshot on)
- 1つのトランザクションでデータが変更されている場合、このデータの選択(他のトランザクションまたはトランザクションなし)は、最初のトランザクションが終了するまで待機せず、瞬間に値を返します t of トランザクション開始 。 選択 NOCHECKヒント は、変更されたがコミットされていないデータを返します。
- 1つのトランザクションでデータが読み取られている場合、他のトランザクションでのこのデータの更新は、最初のトランザクションが終了するまで待機しません。
- 共有ロックは使用されません。代わりに行バージョン管理メカニズムが使用されます–更新されたレコードのデータは tempdbに保存されます 。
- 排他的ロックはステートメントの実行中に有効になり、トランザクションの終了時に無効になります 。
繰り返し読み取り
- 1つのトランザクションでデータが変更されている場合、このデータの選択(他のトランザクションまたはトランザクションなし)は、最初のトランザクションが終了するまで待機します。選択 NOLOCKヒントは、変更されたがコミットされていないデータを返します。
- 1つのトランザクションでデータが読み取られている場合、他のトランザクションでのこのデータの更新は、最初のトランザクションが終了するまで待機します。
- 共有ロックは、ステートメントの実行中に有効になり、トランザクションの終了時に無効になります 、ReadCommittedとは異なります。
- 排他的ロックは、ステートメントの実行中に有効になり、トランザクションの終了時に無効になります 。
シリアル化可能
- 1つのトランザクションでデータが変更されている場合、このデータの選択(他のトランザクションまたはトランザクションなし)は、最初のトランザクションが終了するまで待機します。 選択 NOLOCKヒントは 変更されたがコミットされていないデータを返します。
- 1つのトランザクションでデータが読み取られている場合、他のトランザクションでのこのデータの更新は、最初のトランザクションが終了するまで待機します。
- 共有ロックは、ステートメントの実行中に有効になり、トランザクションの終了時に無効になります 。
- 排他的ロックはステートメントの実行中に有効になり、トランザクションの終了時に無効になります。
- クエリ条件の範囲を満たすキーに対して、排他的範囲ロックが有効になっています。この範囲内の新しいレコードの挿入は許可されていません。設定と同じ HOLDLO CK ヒント のすべてのSELECT Committedをお読みください。
スナップショット
(alter database xxx set allow_snapshot_isolation on)
- 1つのトランザクションでデータが変更されている場合、このデータの選択(他のトランザクションまたはトランザクションなし)は、最初のトランザクションが終了するまで待機しません。 現時点で値を返します の トランザクション開始 。 選択 NOLOCKヒントは 変更されたがコミットされていないデータを返します。
- 1つのトランザクションでデータが読み取られている場合、他のトランザクションでのこのデータの更新は、最初のトランザクションが終了するまで待機しません。
- 共有ロックは使用されません。代わりに行バージョン管理メカニズムが使用されます–更新されたレコードのデータは tempdbに保存されます 。
- 排他的ロックは、ステートメントの実行中に有効になり、トランザクションの終了時に無効になります。
MSSQL2014でテスト済み。