ホーム > データベーススペシャリスト試験 > 2013年
データベーススペシャリスト試験 2013年 午前2 問09
トランザクションの隔離性水準のうち、次の(1)、(2)に該当するSQLの指定はどれか。
(1)対象の表のダーティリードは回避できる。
(2)一つのトランザクション中で、対象の表のある行を2回以上参照する場合、1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。
ア:READ COMMITTED(正解)
イ:READ UNCOMMITTED
ウ:REPEATABLE READ
エ:SERIALIZABLE
解説
トランザクションの隔離性水準の解説
問題の復習
トランザクションの隔離性水準に関する以下の条件に合致するSQLの指定はどれか?(1) 対象の表のダーティリードは回避できる。(2) 一つのトランザクション中で、対象の表のある行を2回以上参照する場合、1回目の読込みと2回目以降の読込みで列値が同じであるとは限らない。
選択肢:
ア: READ COMMITTED
イ: READ UNCOMMITTED
ウ: REPEATABLE READ
エ: SERIALIZABLE
ア: READ COMMITTED
イ: READ UNCOMMITTED
ウ: REPEATABLE READ
エ: SERIALIZABLE
正解は「ア(READ COMMITTED)」です。
解説
1. 隔離性とは?
トランザクションの隔離性(Isolation)は、複数のトランザクションが同時実行される際にお互いの影響をどの程度防ぐかを示します。
SQL標準では以下の4つの隔離レベルが定義されています。
SQL標準では以下の4つの隔離レベルが定義されています。
- ダーティリード:他のトランザクションがまだコミットしていない変更を読み取ってしまうこと。
- ノンリピータブルリード:同じ行の2回目以降の読み取り時に値が変わっていること。
- ファントムリード:ある範囲検索の結果にトランザクションの途中で行が追加・削除され結果が変わること。
2. 選択肢の隔離レベルのまとめ
ア: READ COMMITTED
- ダーティリード防止:コミット済みのデータのみ読み取り可能。
- ノンリピータブルリード存在:同じ行を2回参考にした時、間に別トランザクションが更新&コミットしていれば値は変わる可能性がある。
- ファントムリード存在。
したがって、条件(1) ダーティリードを防ぎ、条件(2) ノンリピータブルリードを許す。
イ: READ UNCOMMITTED
- ダーティリード許すため、(1)の条件に合わない。
ウ: REPEATABLE READ
- ダーティリード防止。
- ノンリピータブルリード防止。
- ファントムリードは発生する場合がある。
(2)の条件に合わない。
エ: SERIALIZABLE
- 最も高い隔離レベル。
- ダーティリード、ノンリピータブルリード、ファントムリードすべて防止。
(2)の条件に合わない。
3. なぜ正解は「ア: READ COMMITTED」か
- (1)「ダーティリード防止」 → READ COMMITTED以上で保証される。
- (2)「同じ行の値が複数回の読み取りで同じとは限らない」 → これはREAD COMMITTEDの特徴であり、トランザクション内で複数回同じ行を読んでも別トランザクションのコミットによって値が変わり得るから。
- つまり、READ COMMITTEDは ダーティリードは避けつつも、再読時の値の変動は許容する水準。
まとめ
よって、「ア: READ COMMITTED」が正解です。
参考文献
- 『SQLアンチパターン』ビル・カーリンズ 著
- 『データベース実践入門』ミック 著
- SQLのトランザクション隔離レベル (w3schools)