ホーム > データベーススペシャリスト試験 > 2012年
データベーススペシャリスト試験 2012年 午前2 問15
SQLでトランザクションの隔離性水準をREAD COMMITTEDに指定したときに発生する状態はどれか。
ア:ダーティリードとアンリピータブルリードとファントムリードが発生する。
イ:ダーティリードとアンリピータブルリードは発生しないが, ファントムリードが発生する。
ウ:ダーティリードは発生しないが, アンリピータブルリードとファントムリードが発生する。(正解)
エ:ダーティリードもアンリピータブルリードもファントムリードも発生しない。
解説
SQLでトランザクションの隔離性水準をREAD COMMITTEDに指定したときに発生する状態はどれか【午前2 解説】
要点まとめ
- 結論:READ COMMITTEDではダーティリードは防止されるが、アンリピータブルリードとファントムリードは発生する。
- 根拠:READ COMMITTEDはコミット済みデータのみ読み取るため、未コミットの変更は見えずダーティリードは起きない。
- 差がつくポイント:アンリピータブルリードとファントムリードの違いを理解し、隔離レベルごとの発生有無を正確に把握することが重要。
正解の理由
READ COMMITTEDはトランザクションがコミット済みのデータのみを読み取るため、未コミットの変更を読み取るダーティリードは発生しません。しかし、同一トランザクション内で同じクエリを複数回実行した際に、他のトランザクションのコミットによってデータが変わるためアンリピータブルリードが起こります。また、条件に合致する行が他トランザクションの挿入や削除で変わるためファントムリードも発生します。これらの理由から「ウ」が正解です。
よくある誤解
READ COMMITTEDは「すべての不整合を防ぐ」と誤解されがちですが、アンリピータブルリードやファントムリードは防げません。これらはより高い隔離レベルで対処します。
解法ステップ
- トランザクションの隔離レベル「READ COMMITTED」の定義を確認する。
- ダーティリードの意味(未コミットデータの読み取り)を理解し、READ COMMITTEDで防止されることを確認。
- アンリピータブルリード(同一トランザクション内でのデータ変化)とファントムリード(行の挿入・削除による変化)を理解。
- READ COMMITTEDではアンリピータブルリードとファントムリードが発生することを把握。
- 選択肢の内容と照合し、正しいものを選ぶ。
選択肢別の誤答解説
- ア: ダーティリードも発生するとあるが、READ COMMITTEDでは未コミットデータは読めないため誤り。
- イ: ファントムリードは発生しないとあるが、READ COMMITTEDでは防げず誤り。
- ウ: ダーティリードは発生しないがアンリピータブルリードとファントムリードは発生するため正解。
- エ: すべての不整合が発生しないとあるが、READ COMMITTEDはアンリピータブルリードとファントムリードを防げないため誤り。
補足コラム
トランザクションの隔離レベルは主に4段階あり、上位ほど整合性が高いが性能に影響します。
- READ UNCOMMITTED:最も低く、ダーティリードも発生。
- READ COMMITTED:ダーティリード防止。
- REPEATABLE READ:アンリピータブルリード防止。
- SERIALIZABLE:ファントムリードも防止し完全な直列化を実現。
実務では性能と整合性のバランスを考慮し適切な隔離レベルを選択します。
FAQ
Q: ダーティリードとは何ですか?
A: 他トランザクションの未コミットの変更を読み取ることで、後にロールバックされる可能性がある不整合な読み取りです。
A: 他トランザクションの未コミットの変更を読み取ることで、後にロールバックされる可能性がある不整合な読み取りです。
Q: ファントムリードはどの隔離レベルで防げますか?
A: SERIALIZABLEレベルで防止可能です。REPEATABLE READでは防げない場合があります。
A: SERIALIZABLEレベルで防止可能です。REPEATABLE READでは防げない場合があります。
関連キーワード: トランザクション, 隔離レベル, READ COMMITTED, ダーティリード, アンリピータブルリード, ファントムリード