隔離性水準(ISOLATION LEVEL)とは(データベーススペシャリスト)
めもです。
データベーススペシャリストに合格した際に、個人的に覚えにくかった部分をまとめます。
第一弾はトランザクションの隔離性水準について
0.概要(独立性阻害要因と隔離性水準)
独立性阻害要因は3種類あり、発生する場合は隔離性が低い。
1.ダーティリード
2.ノンリピータブルリード
3.ファントムリード
隔離性水準(ISOLATION LEVEL)は以下の4段階で、段階が高いほど隔離性が高い。
1.READ UNCOMMITTED
2.READ COMMITTED
3.REPEATABLE READ
4.SERIALIZABLE
1.独立性阻害要因
1-1.ダーティリード
あるトランザクションにおけるコミット前の更新を読み込むこと。
本来トランザクションではコミットをして初めて変更が全体に反映される。
つまり、コミットされるまでは間違った変更を修正できるはずである。
しかし、ダーティリードが発生してしまうと間違った変更をほかのトランザクションから読み込んでしまう可能性がある。
例)
①トランザクションAで誤ったUPDATE文を実行
②トランザクションBでSELECT文を実行
③トランザクションAでロールバック
→トランザクションBは誤ったデータを取得してしまう可能性がある!
1-2.ノンリピータブルリード
トランザクションの途中で他のトランザクションが終了したときに、終了したトランザクションによるUPDATE結果が、継続中のトランザクションに反映されてしまうこと。
データの状態によって処理を変えたい場合に、データの確認時とデータ処理時でデータの値が変わってしまっている可能性がある。
例)
①トランザクションA開始。
②トランザクションB開始。
③トランザクションBでSELECT文実行。
④トランザクションAでUPDATE文実行。
⑤トランザクションAでコミット。
⑥トランザクションBで③の結果によって異なるデータ処理実行。
→⑥の段階で③のSELECT文を実行すると異なる結果になる可能性があるため、想定と異なる処理をしてしまう可能性がある。(④のUPDATE文の結果が反映されているため)
1-3.ファントムリード
トランザクションの途中で他のトランザクションが終了したときに、終了したトランザクションによるINSERT結果が、継続中のトランザクションに反映されてしまうこと。
データの状態によって処理を変えたい場合に、データの確認時とデータ処理時でデータ数が変わってしまっている可能性がある。
例)
①トランザクションA開始。
②トランザクションB開始。
③トランザクションBでSELECT文実行。
④トランザクションAでINSERT文実行。
⑤トランザクションAでコミット。
⑥トランザクションBで③の結果によって異なるデータ処理実行。
→⑥の段階で③のSELECT文を実行すると異なる結果になる可能性があるため、想定と異なる処理をしてしまう可能性がある。(④のINSERT文の結果が反映されているため)
2.隔離性水準
2-1.READ UNCOMMITTED
ダーティリードとノンリピータブルリードとファントムリードが発生する。
2-2.READ COMMITTED
ノンリピータブルリードとファントムリードが発生する。
2-3.REPEATABLE READ
ファントムリードが発生する。
2-4.SERIALIZABLE
独立性阻害要因は発生しない。