平成24年春期試験問題 午前Ⅱ 問15
問15解説へ
SQLでトランザクションの隔離性水準を READ COMMITTED に指定したときに発生する状態はどれか。
- ダーティリードとアンリピータブルリードとファントムリードが発生する。
- ダーティリードとアンリピータブルリードは発生しないが,ファントムリードが発生する。
- ダーティリードは発生しないが,アンリピータブルリードとファントムリードが発生する。
- ダーティリードもアンリピータブルリードもファントムリードも発生しない。
正解 ウ問題へ
分野:テクノロジ系
中分類:データベース
小分類:トランザクション処理
中分類:データベース
小分類:トランザクション処理
広告
解説
隔離性水準とは、トランザクションに指定できる直列化制約の度合いで、隔離性の低い順に「READ UNCOMMITTED」「READ COMMITTED」「REPEATABLE READ」そして「SERIALIZABLE」の4種類があります。
これらはSQLの"SET TRANSACTION"文に記述され、トランザクションを同時実行したことで発生する異常のうち、どのレベルまでを許容するかを指定するものです。4つの中では以下に示すようにSERIALIZABLEが最も安全ですが、堅牢性と引き換えに処理効率が悪くなります。一般的なDBMSではREAD COMMITTEDがデフォルトになっています。
トランザクションの同時実行で発生する3つの異常と、隔離性水準ごとの許容レベルをまとめると次のようになります。
これらはSQLの"SET TRANSACTION"文に記述され、トランザクションを同時実行したことで発生する異常のうち、どのレベルまでを許容するかを指定するものです。4つの中では以下に示すようにSERIALIZABLEが最も安全ですが、堅牢性と引き換えに処理効率が悪くなります。一般的なDBMSではREAD COMMITTEDがデフォルトになっています。
トランザクションの同時実行で発生する3つの異常と、隔離性水準ごとの許容レベルをまとめると次のようになります。
- ダーティリード(汚読)
- 他のトランザクションが更新したコミット前の値(ダーティデータ)を読み、その後更新処理を行ったトランザクションがロールバックされると、存在しない値を読み込んだことになってしまう異常
- ノンリピータブルリード(再現不可能な読み)
- 同じトランザクションで複数回の読込みを行ったとき、読込む度に値が変わってしまう異常。2回の読込みの間に、別のトランザクションがそのデータを更新したことが原因で発生する。
※設問のアンリピータブルリードも同義です。 - ファントムリード(幽霊)
- 同じトランザクションで複数回の読込みを行ったとき、前回は存在しなかった行が現れる異常。2回の読込みの間に、別のトランザクションがテーブルに行を挿入したことが原因で発生する。
- READ UNCOMMITTEDの説明です。
- REPEATABLE READの説明です。
- 正しい。READ COMMITTEDの説明です。
- SERIALIZABLEの説明です。
広告