トランザクション分離レベルについてメモ
今日、トランザクションの分離レベルについて話が上がったのですが、しっかりと覚えてなかったので確認とメモです。
分離レベル | 概要 |
---|---|
Serializable | 完全直列実行 |
Repeatable Read | 反復読み取り可能 |
Read Committed | コミット済みデータ読み込み可能 |
Read Uncommitted | 未コミットデータ読み取り可能 |
こいつらは ACID 属性をどれだけ満たすかによる分類です。Serializable が完全に ACID 属性を満たします。そのほかは Repeatable Read から Read Uncommitted の順番で低くなっていきます。
低くなるにつれて発生する問題は以下です。
問題 | 概要 |
---|---|
Phantom Read | 2回目の読み取りで、存在しなかった行を読み取ってしまう |
Unrepeatable Read | 2回目の読み取りで、先に読み取った内容と異なっている |
Dirty Read | 未コミットのデータが読み取れる。 |
分離レベルと発生する問題の関係は以下です。
Phantom Read | Unrepeatable Read | Dirty Read | |
Serializable | × | × | × |
Repeatable Read | ○ | × | × |
Read Committed | ○ | ○ | × |
Read Uncommitted | ○ | ○ | ○ |