頻出高 ⏱ 7分 ★★★★★

分離レベル

並行トランザクションの干渉をコントロールする

並行トランザクション間でのデータの見え方(干渉の度合い)を定義した SQL 標準の規格。独立性と性能のトレードオフを調整する。

分離レベルが低いと起きる問題
現象説明
ダーティリード別トランザクションの未コミットの変更が見える
反復不可能読み取り同一トランザクション内で同じ行を2回読むと値が変わる
ファントムリード同一トランザクション内で同じ条件でSELECTすると行数が変わる
分離レベルと防げる異常現象
分離レベルダーティリード反復不可能読みファントム
READ UNCOMMITTED❌ 起きる❌ 起きる❌ 起きる
READ COMMITTED✅ 防ぐ❌ 起きる❌ 起きる
REPEATABLE READ✅ 防ぐ✅ 防ぐ❌ 起きる
SERIALIZABLE✅ 防ぐ✅ 防ぐ✅ 防ぐ
分離レベルが高いほど安全だが、ロック競合が増えて並行性(スループット)が低下する。
READ UNCOMMITTED での問題
時刻トランザクションAトランザクションB
T1BEGIN
T2UPDATE 残高=0(未コミット)
T3SELECT 残高 → 0 を読む(ダーティリード!)
T4ROLLBACK → 残高は元に戻る
T5Bは0という嘘の値を使ってしまった

📝 理解度チェック

READ COMMITTED 分離レベルで防げない異常現象はどれか?
ファントムリードが起きる状況として正しいのはどれか?

読了ボタンを押すとトップページの進捗に反映されます