ホーム > データベーススペシャリスト試験 > 2019年
データベーススペシャリスト試験 2019年 午前2 問09
トランザクションの隔離性水準のうち, 次の(1), (2)に該当するSQLの指定はどれか。
(1)対象の表のダーティリードは回避できる。
(2)一つのトランザクション中で, 対象の表のある行を2回以上参照する場合, 1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。
ア:READ COMMITTED(正解)
イ:REPEATABLE READ
ウ:READ UNCOMMITTED
エ:SERIALIZABLE
解説
トランザクションの隔離性水準に関する解説
トランザクションの隔離性 (Isolation) は、複数のトランザクションが同時に実行される場合でも、データの一貫性を維持するための重要な特性です。SQL標準では、隔離性のレベルとして主に以下の4つが定義されています。
問題の内容
(1) 対象の表のダーティリードは回避できる。
- ダーティリードとは、他のトランザクションがコミットしていない段階で行った変更を読んでしまう現象です。
- これを防止できるのは READ COMMITTED 以上の隔離レベルです。
(2) 一つのトランザクション中で、対象の表のある行を2回以上参照する場合、1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。
- これは、同じトランザクション中に同じ行を2回読み込んだ際に、異なる値になる可能性がある状態で、いわゆる「ノンリピータブルリード(不可繰り返し読み込み)」という問題です。
- READ COMMITTED はダーティリードを防ぐものの、同一行の再読込みが保証されないため、この問題が発生します。
選択肢の確認と解説
正解の理由(ア: READ COMMITTED)
- (1)ではダーティリードが回避できることが条件ですので、READ UNCOMMITTEDは不適切です。
- (2)では2回目以降の読み込みで値が変わる可能性があることが条件なので、REPEATABLE READやSERIALIZABLEは不適切です(それらは同じ読み込み値を保証)。
- よって、(1)と(2)の条件をいずれも満たすのは READ COMMITTED(ア)となります。
まとめ
- READ COMMITTED は、他のトランザクションの未コミットデータを読むこと(ダーティリード)を防止するが、同じ行の複数回読み込みで異なる結果を読み込むことがありえます(ノンリピータブルリードが発生)。
- 他の隔離レベルとの違いを理解することで、目的に合ったトランザクションの隔離性を選択することが重要です。