平成24年度 春期 データベーススペシャリスト試験 午前II 問15
【問題15】
SQL でトランザクションの隔離性水準を READ COMMITTED に指定したときに発生する状態はどれか。
ダーティリードとアンリピートブルリードとファントムリードが発生する。
ダーティリードとアンリピートブルリードは発生する。
ダーティリードは発生しないが,アンリピートブルリードとファントムリードが発生する。
ダーティリードもアンリピートブルリードもファントムリードも発生しない。
【解説】
ダーティリード:
他のトランザクションが更新したコミット前の値(ダーティデータ)を読み、その後更新処理を行ったトランザクションがロールバックされると、存在しない値を読み込んだことになります。READ COMMITTED ではダーティリードは発生しません。
ノンリピートブルリード/ファジーリード:
同じトランザクションで複数回の読み込みを行ったとき、読み込む度に値が変わってしまう現象です。2回の読み込みの間に、別のトランザクションがそのデータを更新した場合に発生します。READ COMMITTED では、ノンリピートブルリードが発生する可能性があります。
ファントムリード:
同じトランザクションで複数回の読み込みを行ったとき、前回は存在しなかった行が現れる異常です。READ COMMITTED では、ファントムリードは発生する可能性があります。
ア: ダーティリードとアンリピートブルリードとファントムリードが発生する。
誤り。READ COMMITTED では、ダーティリード(未コミットのデータを読み取る)を防ぐことができ、アンリピートブルリードやファントムリードも発生しません。
イ: ダーティリードとアンリピートブルリードは発生する。
誤り。READ COMMITTED ではダーティリードは防がれますが、アンリピートブルリードは発生する可能性があります。
ウ: ダーティリードは発生しないが,アンリピートブルリードとファントムリードが発生する。
正しい。READ COMMITTED ではダーティリードは防がれますが、アンリピートブルリード(同じトランザクション内で異なる結果を得る)やファントムリード(トランザクション間でデータの挿入・削除などによる結果の変化)は発生する可能性があります。
エ: ダーティリードもアンリピートブルリードもファントムリードも発生しない。
誤り。READ COMMITTED では、ダーティリードは防げますが、アンリピートブルリードとファントムリードは防げません。
【答え】
ウ: ダーティリードは発生しないが,アンリピートブルリードとファントムリードが発生する。
出典:平成24年度 春期 データベーススペシャリスト試験 午前II 問15