何度見ても覚えられずいつまでも間違えるので自分の言葉でまとめることにしました。
隔離性水準(ISOLATION LEVEL)とは
トランザクションの独立性もしくは分離性のレベルを表している。
トランザクションの独立性もしくは分離性・・・
複数のトランザクションが同時実行されても他のトランザクションの影響を受けずに、単独で実行した場合と同じ結果が得られること
*Isolationは分離という意味を持つ
独立性阻害要因というものがいくつかあり、どれの発生を防ぐかでレベルが変わってくる。
レベルは下記の4種類。
①→②→③→④の順番で分離レベルが高く、強力な隔離レベルと言える。
分離レベル
①READ UNCOMMITTED
4つのレベルの中で一番分離レベルが低い。コミットされていないデータを読み取るので、他トランザクションのコミット前のデータを読んでしまう。
メリット :トランザクションのスループット(時間あたりの処理能力)が高い。
デメリット:独立性阻害要因が発生する。(ダーティリード、ノンリピータブルリード、ファントムリード)
②READ COMMITTED
コミットされたデータだけを読むので、他トランザクションの変更はコミットされるまで読めない。
メリット :独立性阻害要因のダーティリードを阻止できる。
デメリット:独立性阻害要因が発生する。(ノンリピータブルリード、ファントムリード)
③REPEATABLE READ
トランザクションで読み取ったデータは、他のトランザクションで更新できなくなるので、同じデータを繰り返し読み取っても、同じ内容であることが保証される。
*該当のテーブルに追加や削除は可能
メリット :独立性阻害要因のダーティリード、ノンリピータブルリードを阻止できる。
デメリット:独立性阻害要因が発生する。(ファントムリード)
④SERIALIZABLE
複数のトランザクションをどれだけ実行しても、単独で実行した結果と同じものが得られることを保証する。
4つのレベルの中で一番分離レベルが高いが、排他制御による待ち時間が発生しやすい。
メリット :独立性阻害要因が発生しない。(ダーティリード、ノンリピータブルリード、ファントムリード)
デメリット:トランザクションのスループットが低い。
ISOLATION LEVELと独立阻害要因
独立性阻害要因
・ダーティリード
他トランザクションで更新されたコミット前のデータを読み込んでしまうこと。
コミット前にトランザクションがロールバックされて取り消された場合、結果的に更新されなかったデータに対して、処理をしてしまうことになる。
・ノンリピータブルリード(ファジーリード)
同じデータを2回読み込んだ時、1回目と2回目とで異なったデータを読んでしまうこと。
初回の読み込みの後に他トランザクションによってデータの更新がされて、不整合が発生すること。
・ファントムリード
データの読み込みを行った時、1回目と2回目との間でデータの数が異なっていること。
初回の読み込みの後に他トランザクションによってデータの追加などがされて、不整合が発生すること。
幻(ファントム)のデータを読み込んでしまった状態。