令和4年度 秋期 データベーススペシャリスト試験 午前II 問14
トランザクション がある行 を読んだ後,別のトランザクション が行 の値を更新してコミットし,再び が行 を読むと,以前読んだ値と異なる値が得られた。この現象を回避する SQLの隔離性水準のうち,最も水準の低いものはどれか。
解答・解説
正解: ウ. REPEATABLE READ
トランザクション が読み込んだ行 を、別のトランザクション が更新してコミットし、再度 が読み込んだときに値が変わってしまう現象を ノンリピータブルリード(反復不能読取り)と呼びます。
トランザクションの隔離性水準(分離レベル)には、低いものから順に以下の4つがあり、それぞれ防ぐことができる現象(アノマリ)が異なります。
- READ UNCOMMITTED(未コミット読取り): ダーティリード、ノンリピータブルリード、ファントムリードのすべてが発生する
- READ COMMITTED(コミット済み読取り): ダーティリードは回避するが、ノンリピータブルリード、ファントムリードは発生する
- REPEATABLE READ(反復可能読取り): ダーティリードとノンリピータブルリードは回避するが、ファントムリードは発生する
- SERIALIZABLE(直列化可能): すべての現象を回避する
ノンリピータブルリードを回避できるのは REPEATABLE READ 以上の水準です。問題では「回避するSQLの隔離性水準のうち、最も水準の低いもの」を問われているため、正解は REPEATABLE READ となります。
各選択肢の解説
- ア READ COMMITTED: ダーティリードは防ぎますが、ノンリピータブルリードは発生してしまうため誤りです。
- イ READ UNCOMMITTED: 最も隔離性水準が低く、ノンリピータブルリードを含め様々な不整合現象が発生するため誤りです。
- ウ REPEATABLE READ: ノンリピータブルリードを回避できる水準の中で最も低いものであり、正解 です。
- エ SERIALIZABLE: 最も高い隔離性水準であり、ノンリピータブルリードも回避できますが、「最も水準の低いもの」という条件には合致しないため誤りです。