アイソレーションレベル

データベースはあまり詳しくないので、メモ書き。

SQL-92の仕様では、アイソレーションレベルというものがあり、READ_UNCOMMITTED, READ_COMMITED, REPAETABLE_READ, SERIALIZABLEという4つのレベルがあります。これを”SET TRANSACTION ISOLATION LEVEL”文で設定できます。これを設定することで、データベースからデータを読み込む際の挙動がかわります。

それぞれの意味は以下の通り。下にいくほど同時実効効率が悪くります。(NONEを除く)

アイソレーションレベル トランザクションサポート 不正な読み込み
ダーティリード ノンリピータブルリード ファントムリード
READ_UNCOMMITTED 発生 発生 発生
READ_COMMITETED
未発生 発生 発生
REPEATABLE_READ 未発生 未発生 発生
SERIALIZABLE 未発生 未発生 未発生
NONE ×
発生 発生 発生

ここでの なんとかリードっていうのは以下のような意味です。

  • ダーティリード
    • トランザクションAとBがあって、Aが更新内容をコミットしていないのにBにはその内容が見えてしまうこと
  • ノンリピータブルリード
    • トランザクションAとBがあって、Aが更新している最中にBが複数回のSELECTをした場合に、複数回のSELECTの結果が違うこと
  • ファントムリード
    • トランザクションAとBがあって、Aがrowの追加・削除している最中にBが複数回のSELECTをした場合に、複数回のSELECTの結果が違うこと
タイトルとURLをコピーしました