平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問15
テクノロジ/データベースSQLでトランザクションの隔離性水準をREAD COMMITTEDに指定したときに発生する状態はどれか。
出典:平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問15
- アダーティリードとアンリピータブルリードとファントムリードが発生する。
- イダーティリードとアンリピータブルリードは発生しないが,ファントムリードが発生する。
- ウダーティリードは発生しないが,アンリピータブルリードとファントムリードが発生する。
- エダーティリードもアンリピータブルリードもファントムリードも発生しない。
正解:ウ
解説
READ COMMITTEDは,他のトランザクションがコミットしていない未確定の更新結果を読まないようにする隔離性水準であり,これによってダーティリードは発生しない。しかし,同一トランザクション内で同じ行を2回以上読み込む間に,他のトランザクションによる更新・コミットを妨げないため,1回目と2回目で読み込む値が異なってしまうアンリピータブルリード(反復不能読取り)や,同じ条件で再検索した際に,他のトランザクションの挿入・削除によって結果行の集合が変化してしまうファントムリードは防止されない。
選択肢ごとの解説
- ア誤り。READ COMMITTEDは,未コミットのデータを読まないようにすることでダーティリードを防止する隔離性水準であり,ダーティリードが発生するというのは誤りである。
- イ誤り。READ COMMITTEDでは,アンリピータブルリードは防止されず発生し得るため,「ファントムリードだけが発生する」という記述は誤りである。
- ウ正しい。READ COMMITTEDは,ダーティリードは防止するが,アンリピータブルリードとファントムリードは防止しないため,これらは発生し得る。
- エ誤り。ダーティリードは防止されるが,アンリピータブルリードとファントムリードは防止されないため,「いずれも発生しない」というのは誤りである。これを実現するにはより厳格なREPEATABLE READやSERIALIZABLEが必要である。