トランザクション分離レベルについてメモ

今日、トランザクションの分離レベルについて話が上がったのですが、しっかりと覚えてなかったので確認とメモです。

分離レベル 概要
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