トランザクション処理に詳しくなろう http://itpro.nikkeibp.co.jp/article/COLUMN/20080123/291846/ !異常なリード ◆ダーティ・リード(未コミット読み取り) {{div_begin class="pre"}} 他のトランザクションで更新されて,まだコミットされていないデータを読み取ってしまう。ロールバックされるとありえないデータを読み込んだことになる。 {{div_end}} ◆ファジー・リード(またはノンリピータブル・リード) {{div_begin class="pre"}} 他のトランザクションの更新前とコミット後のデータを読んでしまうことにより一度読み込んだデータを再読み込みすると結果が異なる。 {{div_end}} ◆ファントム・リード(幻影読み取り) {{div_begin class="pre"}} 他のトランザクションがデータの挿入,削除を行うとき,同じ検索条件で読んでいるのに,あったはずの行が消えたり,なかった行が現れたりする。 {{div_end}} !分離レベル 1. READ UNCOMMITTED {{div_begin class="pre"}} READ UNCOMMITTED(リード・アンコミッテッド)は,最も分離性が低い分離レベルです。他のトランザクションがコミットしていないデータを読み込んでしまいます。図2のダーティ・リード,ファジー・リード,ファントム・リードすべてを許容します。 {{div_end}} 2. READ COMMITTED {{div_begin class="pre"}} READ COMMITTED(リード・コミッテッド)は,2番目に分離性が低い分離レベルですが,未コミットのデータは読み取りません。具体的にはファジー・リード,ファントム・リードは許しますが,ダーティ・リードは抑止します。 {{div_end}} 3. REPEATABLE READ {{div_begin class="pre"}} REPEATABLE READ(リピータブル・リード)を指定すると,あるトランザクションが参照したデータは,そのトランクションが終了するまで,他のトランザクションで変更することができなくなります。具体的にはダーティ・リード,ファジー・リードを抑止して,ファントム・リードだけを許可します。 {{div_end}} 4. SERIALIZABLE {{div_begin class="pre"}} SERIALIZABLE(シリアライザブル)が最も分離性の高いレベルです。ダーティ・リード,ファジー・リード,ファントム・リードのいずれも抑止します。あるトランザクションが参照したデータを変更することができないだけでなく,参照に使用した条件に一致するデータを挿入することもできなくなるわけです。 {{div_end}} !異常なリードと分離レベル ,,ダーティー・リード,ファジー・リード,ファントム・リード ,リード・アンコミッティド,許可,許可,許可 ,リード・コミッティド,抑止,許可,許可 ,リピータブル・リード,抑止,抑止,許可 ,シリアライザブル,抑止,抑止,抑止 {{category2 プログラミング全般}}