一意性制約に裏打ちされた主キーを持つテーブルがあります。したがって、SERIALIZABLE 分離を使用するクエリは、同じ主キーを持つ 2 つの行を返すことはありません。しかし、それは READ COMMITTED 分離を使用したクエリにも当てはまりますか? 主キーの明らかな重複が不可能な、最も緩い分離レベルはどれですか?
2 に答える
主キーの明らかな重複が不可能な、最も緩い分離レベルはどれですか?
REPEATABLE READ
またREAD COMMITTED SNAPSHOT
READ COMMITTED
SQL Server では、 (ロック)でのスキャンが行を 2 回読み取る可能性があります。
この分離レベルでは、ステートメントまたはトランザクションの最後ではなく、データが読み取られるとすぐに行ロックが解放されます。
したがって、キーの順序でインデックスを読み取るスキャンで、最初の読み取りの後にキーが更新され、インデックスの後半に移動した場合、同じ行に再び遭遇する可能性があります。実際に重複する主キーを観察するには、スキャンされるインデックスが PK 自体とは異なるキー列にある必要がある可能性があります。
REPEATABLE READ
まだ読み取られていないデータがインデックス内で既にスキャンされた部分に移動すると、行を見逃す可能性がありますが、これにより、明らかな重複主キーの現象が発生することはありません。
OracleDB では、PK が延期可能で延期されない限り、それに違反することはできません。サポートされている最低の 'READ COMMITTED' レベル (ANSI/ISO レベル 1) であっても、同じ行を操作する別のセッションで行ロックが発生します。競合。したがって、2 番目のセッションの DML は、コミットまたはロールバックによって最初のロックが解放されるまで待機し続けます。その後、オンザフライで検証され、PK に違反すると失敗します。