

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 分離レベルの定義
<a name="transactions-isolation-levels"></a>

`ACID` で「I」は*分離*を表します。トランザクションの分離度によって、他の同時トランザクションが処理するデータにどの程度影響するかが決まります。

[SQL:1992 Standard](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt) では、分離レベルを記述するための語彙を作成しました。これは、3種類のインタラクションを定義します (*現象*と呼ぶものです)。これは、2 つの同時トランザクション `Tx1` および `Tx2` 間で発生する可能性があります。
+ `Dirty read` – これは、`Tx1` が項目を変更し、`Tx1` がその変更をコミットする前にその項目を `Tx2` が読み取るときに発生します。その後、`Tx1` が変更のコミットに成功しなかったり、ロールバックされたりすると、`Tx2` はデータベースにそれを行わなかった値を読み取ります。
+ `Non-repeatable read` – これは、`Tx1` が項目を読み取り、`Tx2` がその項目を変更または削除して変更をコミットし、`Tx1` がその項目の再読み込みを試みるときに発生します。`Tx1` は、以前とは異なる値を読み取るか、項目が存在しなくなったことを検出します。
+ `Phantom read` – これは、`Tx1` が検索条件を満たす一連の項目を読み取り、`Tx2` が検索条件を満たす新しい項目を追加し、`Tx1` が検索を繰り返したときに発生します。`Tx1` は、以前とは異なる一連の項目を取得するようになりました。

これら 3 つのタイプの操作はそれぞれ、データベースの結果データに不整合が生じる可能性があります。

SQL:1992 標準では、3 つのタイプのインタラクションとそれらが生成できる不整合の点で異なる保証を持つ 4 つの分離レベルが定義されています。すべての 4 つのレベルで、トランザクションが完全に実行されるか、まったく実行されないかが保証されます。
+ `READ UNCOMMITTED` – 3 種類のインタラクション (ダーティリード、非再現リード、ファントムリード) をすべて許可します。
+ `READ COMMITTED` – ダーティリードは可能ではありませんが、非再現リードとファントムリードは可能です。
+ `REPEATABLE READ` – ダーティリードも非再現リードも可能ではありませんが、ファントムリードは可能です。
+ `SERIALIZABLE` – 3 つのタイプの相互作用現象は発生しません。

マルチバージョン同時実行制御 (MVCC) では、1 つの他の種類の分離、つまり *SNAPSHOT* 分離が可能です。これにより、トランザクションが開始されたときに存在するデータのスナップショットに対してトランザクションが実行され、他のトランザクションがそのスナップショットを変更できないことが保証されます。