データベーススペシャリスト試験 2013年 午前2 問09
トランザクションの隔離性水準のうち、次の(1)、(2)に該当するSQLの指定はどれか。
(1)対象の表のダーティリードは回避できる。
(2)一つのトランザクション中で、対象の表のある行を2回以上参照する場合、1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。
ア:READ COMMITTED(正解)
イ:READ UNCOMMITTED
ウ:REPEATABLE READ
エ:SERIALIZABLE
解説
トランザクションの隔離性水準のうち、次の(1)、(2)に該当するSQLの指定はどれか【午前2 解説】
要点まとめ
- 結論:ダーティリードを回避しつつ、同一トランザクション内での再読込み値の一貫性は保証しないのはREAD COMMITTEDである。
- 根拠:READ COMMITTEDはコミット済みデータのみを読み込み、未コミットの変更は見えないためダーティリードを防ぐが、再読込み時に他トランザクションの更新が反映される。
- 差がつくポイント:再読込み時の値の変化を許容するか否かで隔離レベルを区別し、問題文の条件に合致するのはREAD COMMITTEDのみである。
正解の理由
(1)の「ダーティリードを回避できる」は、未コミットの変更を読み込まないことを意味し、READ COMMITTED以上の隔離レベルで実現されます。
(2)の「同一トランザクション内での再読込み値が同じとは限らない」は、READ COMMITTEDの特徴であり、他トランザクションのコミット済み更新が反映されるためです。
したがって、両条件を満たすのはア: READ COMMITTEDです。
(2)の「同一トランザクション内での再読込み値が同じとは限らない」は、READ COMMITTEDの特徴であり、他トランザクションのコミット済み更新が反映されるためです。
したがって、両条件を満たすのはア: READ COMMITTEDです。
よくある誤解
READ UNCOMMITTEDはダーティリードを許すため(1)を満たさず、REPEATABLE READやSERIALIZABLEは再読込み値の一貫性を保証するため(2)を満たしません。
解法ステップ
- 「ダーティリード回避」の意味を確認し、未コミットデータの読み込み禁止を理解する。
- 「再読込み値の一貫性保証の有無」を確認し、同一トランザクション内で値が変わる可能性を考える。
- 各隔離レベルの特徴を整理し、条件に合致するものを選ぶ。
- 選択肢のSQL指定と隔離レベルの対応を照合し、最適解を決定する。
選択肢別の誤答解説ステップ
- ア: READ COMMITTED
正解。未コミットデータは読まないが、再読込み時に他トランザクションのコミット済み更新が反映される。 - イ: READ UNCOMMITTED
誤り。未コミットデータも読み込むためダーティリードが発生し、(1)を満たさない。 - ウ: REPEATABLE READ
誤り。再読込み時の値の一貫性を保証するため(2)を満たさない。 - エ: SERIALIZABLE
誤り。最も高い隔離レベルで再読込み値の一貫性を保証し、(2)を満たさない。
補足コラム
トランザクションの隔離性はANSI/ISO SQL標準で定義され、主に4段階あります。
- READ UNCOMMITTED:最も低い隔離レベルでダーティリードを許す。
- READ COMMITTED:未コミットデータを読まず、ダーティリードを防止。
- REPEATABLE READ:同一トランザクション内の再読込み値を保証し、ファントムリードは許す場合もある。
- SERIALIZABLE:最も高い隔離レベルで、すべての不整合を防止。
実務では性能と整合性のバランスを考慮し、READ COMMITTEDが多く採用されています。
FAQ
Q: ダーティリードとは何ですか?
A: 他トランザクションが未コミットの変更を読み込むことで、後にロールバックされる可能性がある不整合な読み込みのことです。
A: 他トランザクションが未コミットの変更を読み込むことで、後にロールバックされる可能性がある不整合な読み込みのことです。
Q: REPEATABLE READとREAD COMMITTEDの違いは何ですか?
A: REPEATABLE READは同一トランザクション内での再読込み値を保証しますが、READ COMMITTEDは再読込み時に他トランザクションのコミット済み変更が反映されるため保証しません。
A: REPEATABLE READは同一トランザクション内での再読込み値を保証しますが、READ COMMITTEDは再読込み時に他トランザクションのコミット済み変更が反映されるため保証しません。
関連キーワード: トランザクション, 隔離レベル, ダーティリード, SQL, READ COMMITTED, REPEATABLE READ, SERIALIZABLE