SQL 分離レベルの概要

SQLの分離レベルの概要です。

目次

説明 分離レベル
  分離レベル0で発生するダーティリードとは
  分離レベル1で発生するファジーリードとは
  分離レベル2で発生するファントムリードとは

分離レベル

  • トランザクションの分離レベルです。
  • 複数のトランザクションが同時に実行されたときのデータの整合性を保つ度合いです。
  • 数値の高いほうが分離性はあります。
  • ACID特性のうちのI(Isolation)にあたります。
分離レベル ダーティリード ファジーリード ファントムリード
分離レベル0
READ UNCOMMITTED
未コミットのデータを読む
発生する 発生する 発生する
分離レベル1
READ COMMITTED
コミットのデータを読む
× 発生する 発生する
分離レベル2
REPEATABLE READ
反復可能な読み込み
× × 発生する
分離レベル3
SERIALIZABLE
シリアル,1つずつ
× × ×
  • 分離レベル2は、ファジーリードは発生しません。読込中のデータに対して他のトランザクションは更新できません。

分離レベル0で発生するダーティリードとは

  • ダーティリードとは、別のトランザクションが更新して確定していないデータを読み込めてしまうことです。
  • 取得したデータは、Rollback(無効化)される場合もあります。
  • 別のトランザクションが更新中のデータに対して更新はできません。
  • 分離レベル0のREAD UNCOMMITTEDで発生します。

分離レベル1で発生するファジーリードとは

  • ファジーリードとは、取得したデータに対して、別のトランザクションがそのデータを更新して確定た後に、再度データを読み込むと値が変わっていることです。
  • ノンリピータブルリードとも呼ばれます。
  • 分離レベル1のREAD COMMITTEDで発生します。
  • Oracleは、READ COMMITTEDを実装しています。別のトランザクションが更新して確定していないデータは表示されません。確定しているデータが表示されます。読み取り一貫性と呼ばれます。

分離レベル2で発生するファントムリードとは

  • ファントムリードとは、ある条件で取得したデータに対して、別のトランザクションが
    データをInsertして確定した後に、再度同じ条件でデータを読み込むとデータが増えていることです。
  • 別のトランザクションがDeleteして、再読み込みで減る場合もあります。
  • 分離レベル2のREPEATABLE READで発生します。
  • ファントム(phantom)とは幻という意味です。

関連の記事

SQL select for updateのサンプル

△上に戻る