IPA過去問ドリル

平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問9

テクノロジ/データベース

トランザクションの隔離性水準のうち,次の(1),(2)に該当するSQLの指定はどれか。 (1) 対象の表のダーティリードは回避できる。 (2) 一つのトランザクション中で,対象の表のある行を2回以上参照する場合,1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。

出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問9

正解:ア

解説

SQLの隔離性水準のうち,READ COMMITTEDは,コミットされていないデータを読まないためダーティリードを回避できますが,同一トランザクション内で同じ行を複数回読み込んだ場合,その間に他のトランザクションがコミットした更新が反映されることがあるため,1回目と2回目以降で読み込む値が異なる(反復不能読取り,non-repeatable read)ことがあります。これは設問の(1)(ダーティリード回避)と(2)(読込み値の一致が保証されない)の両方に合致します。

選択肢ごとの解説

  • 正しい。READ COMMITTEDは,コミット済みのデータだけを読むためダーティリードは回避できますが,反復不能読取りは防止されないため,同じ行を2回以上読むと読込み値が異なることがあります。
  • 誤り。READ UNCOMMITTEDは,他のトランザクションがコミットしていない変更も読み込めるため,ダーティリードが発生し得ます。設問(1)のダーティリード回避を満たしません。
  • 誤り。REPEATABLE READは,ダーティリードを回避できるだけでなく,同一トランザクション内で同じ行を再読込みした場合の値の一致(反復可能読取り)も保証するため,設問(2)の「保証されない」という記述には該当しません。
  • 誤り。SERIALIZABLEは最も厳格な隔離性水準であり,ダーティリードだけでなく反復不能読取りやファントムリードも防止し,読込み値の一致を保証するため,設問(2)には該当しません。
データベーススペシャリストの過去問を演習モードで解く