令和4年度 秋期 データベーススペシャリスト試験 午前II 問14
2025年6月30日
【問題14】
トランザクション T₁ がある行 X を読んだ後,別のトランザクション T₂ が行 X の値を更新してコミットし,再び T₁ が行 X を読むと,以前読んだ値と異なる値が得られた。この現象を回避する SQL の隔離性水準のうち,最も水準の低いものはどれか。
【解説】
SQL の隔離性水準(Isolation Levels)には以下の4つがあります。
- READ UNCOMMITTED
許容される現象: ダーティリード、ノンリピータブルリード、ファントムリード
説明: 他のトランザクションがコミットしていないデータを読み取ることができます。データの整合性は最も低いです。
- READ COMMITTED
許容される現象: ノンリピータブルリード、ファントムリード
説明: 他のトランザクションがコミットしたデータのみを読み取ります。同じトランザクション内で再度データを読み取ると、異なる結果が得られる可能性があります。
- REPEATABLE READ
許容される現象: ファントムリード
説明: 同じトランザクション内で同じデータを複数回読み取っても、常に同じ結果が得られます。ただし、範囲クエリでは新しい行の挿入により結果が変わる可能性があります。
- SERIALIZABLE
許容される現象: なし
説明: 最も厳格な隔離性水準で、すべてのトランザクションが直列に実行されるように扱われます。すべての不整合を防ぎます。
問題の現象:
ノンリピータブルリード:
同じトランザクション内で同じデータを再度読み取ったとき、前回と異なる値が得られる現象です。これは、他のトランザクションがデータを更新しコミットしたために発生します。
回避方法:
REPEATABLE READ 以上の隔離性水準を設定することで、ノンリピータブルリードを回避できます。
出典:令和4年度 秋期 データベーススペシャリスト試験 午前II 問14