並行トランザクションの干渉をコントロールする
並行トランザクション間でのデータの見え方(干渉の度合い)を定義した SQL 標準の規格。独立性と性能のトレードオフを調整する。
| 現象 | 説明 |
|---|---|
| ダーティリード | 別トランザクションの未コミットの変更が見える |
| 反復不可能読み取り | 同一トランザクション内で同じ行を2回読むと値が変わる |
| ファントムリード | 同一トランザクション内で同じ条件でSELECTすると行数が変わる |
| 分離レベル | ダーティリード | 反復不可能読み | ファントム |
|---|---|---|---|
| READ UNCOMMITTED | ❌ 起きる | ❌ 起きる | ❌ 起きる |
| READ COMMITTED | ✅ 防ぐ | ❌ 起きる | ❌ 起きる |
| REPEATABLE READ | ✅ 防ぐ | ✅ 防ぐ | ❌ 起きる |
| SERIALIZABLE | ✅ 防ぐ | ✅ 防ぐ | ✅ 防ぐ |
| 時刻 | トランザクションA | トランザクションB |
|---|---|---|
| T1 | BEGIN | |
| T2 | UPDATE 残高=0(未コミット) | |
| T3 | SELECT 残高 → 0 を読む(ダーティリード!) | |
| T4 | ROLLBACK → 残高は元に戻る | |
| T5 | Bは0という嘘の値を使ってしまった |
読了ボタンを押すとトップページの進捗に反映されます