令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問14
テクノロジ/データベーストランザクション T₁ がある行 X を読んだ後,別のトランザクション T₂ が行 X の値を更新してコミットし,再び T₁ が行 X を読むと,以前読んだ値と異なる値が得られた。この現象を回避する SQL の隔離性水準のうち,最も水準の低いものはどれか。
出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問14
- アREAD COMMITTED
- イREAD UNCOMMITTED
- ウREPEATABLE READ
- エSERIALIZABLE
正解:ウ
解説
設問の現象は,同一トランザクション内で同じ行を2回読んだ際に,その間に別のトランザクションがコミットした更新によって異なる値が読まれてしまう「非再現読取り(Non-Repeatable Read)」です。隔離性水準がREAD COMMITTED以下では,この現象が発生し得ます。REPEATABLE READ以上の水準では,トランザクション開始時に読んだ値が終了まで変わらないことが保証されるため,非再現読取りは発生しません。したがって,この現象を回避できる最も水準の低いものはREPEATABLE READです。
選択肢ごとの解説
- ア誤り。READ COMMITTEDはコミット済みのデータしか読まないためダーティリードは防げますが,同一トランザクション内で複数回読み取ると別トランザクションのコミットにより異なる値を読む非再現読取りは防げません。
- イ誤り。READ UNCOMMITTEDは最も低い隔離性水準であり,ダーティリードも含めて設問の現象より深刻な不整合まで許容するため,この現象を回避できません。
- ウ正しい。REPEATABLE READでは,トランザクション内で一度読んだ行の値はトランザクションが終了するまで変化しないことが保証されるため,非再現読取りの現象を回避できる,最も水準の低い隔離性水準です。
- エ誤り。SERIALIZABLEは非再現読取りを回避できますが,REPEATABLE READよりも水準が高く,設問が求める「最も水準の低いもの」には該当しません。