Sql_92_isolation_level

2017/07/23

トランザクション分離レベル SQL 92版

トランザクション分離レベルとは?

トランザクション分離レベルを定義する問題

トランザクション分離レベルはレベル毎に発生する不整合の種類が異なる。 以下で発生する不整合について簡単に記載する。

Dirty Read

あるトランザクション(T1)がcommit or rollbackする前のデータを別のトランザクション(T2)が読んでしまう問題

Non-repeatable or Fuzzy Read

あるトランザクション(T1)がデータXを読み込んだ後、別のトランザクション(T2)がデータXを書き換えcommitし、 T1のトランザクションが変更された後のデータXを読み込んでしまう問題

Phantom

あるトランザクション(T1)が特定条件を満たすデータの集合(S1)を読み込んだ後に、 別のトランザクション(T2)がS1を満たすデータを作成しcommitする。 T1のトランザクションが再度S1のデータ集合を読み込むと、最初の読み込みとは異なるデータ集合を得てしまうこと

トランザクション分離レベル

レベル Dirty Read Non-repeatable or Fuzzy Read Phantom
READ UNCOMMITTED x x x
READ COMMITTED o x x
REPEATABLE READ o o x
SERIALIZABLE o o o

o: 発生しない x: 発生する

その他

ANSI SQL 92で定義されている不整合意外や分離レベル以外もあるので、 詳細を知りたければ下記を読むといいと思う(後でまたまとめる)。 https://arxiv.org/pdf/cs/0701157.pdf

参考資料

A Critique of ANSI SQL Isolation Levels

A Critique of ANSI SQL Isolation Levels - the morning paper

Myths and Misconceptions about Transaction Isolation Levels