令和4年度 秋期 データベーススペシャリスト試験 午前II 問14

トランザクション T1T_1 がある行 XX を読んだ後,別のトランザクション T2T_2 が行 XX の値を更新してコミットし,再び T1T_1 が行 XX を読むと,以前読んだ値と異なる値が得られた。この現象を回避する SQLの隔離性水準のうち,最も水準の低いものはどれか。

解答・解説

正解: ウ. REPEATABLE READ

トランザクション T1T_1 が読み込んだ行 XX を、別のトランザクション T2T_2 が更新してコミットし、再度 T1T_1 が読み込んだときに値が変わってしまう現象を ノンリピータブルリード(反復不能読取り)と呼びます。

トランザクションの隔離性水準(分離レベル)には、低いものから順に以下の4つがあり、それぞれ防ぐことができる現象(アノマリ)が異なります。

  1. READ UNCOMMITTED(未コミット読取り): ダーティリード、ノンリピータブルリード、ファントムリードのすべてが発生する
  2. READ COMMITTED(コミット済み読取り): ダーティリードは回避するが、ノンリピータブルリード、ファントムリードは発生する
  3. REPEATABLE READ(反復可能読取り): ダーティリードとノンリピータブルリードは回避するが、ファントムリードは発生する
  4. SERIALIZABLE(直列化可能): すべての現象を回避する

ノンリピータブルリードを回避できるのは REPEATABLE READ 以上の水準です。問題では「回避するSQLの隔離性水準のうち、最も水準の低いもの」を問われているため、正解は REPEATABLE READ となります。

各選択肢の解説

  • ア READ COMMITTED: ダーティリードは防ぎますが、ノンリピータブルリードは発生してしまうため誤りです。
  • イ READ UNCOMMITTED: 最も隔離性水準が低く、ノンリピータブルリードを含め様々な不整合現象が発生するため誤りです。
  • ウ REPEATABLE READ: ノンリピータブルリードを回避できる水準の中で最も低いものであり、正解 です。
  • エ SERIALIZABLE: 最も高い隔離性水準であり、ノンリピータブルリードも回避できますが、「最も水準の低いもの」という条件には合致しないため誤りです。

Spineチーム