データベーススペシャリスト試験 2017年 午前217


図は, ある探索条件を使って数学模試の平均点を算出している間, 当該探索条件に合致するA君の結果を“数学模試成績”表に登録したときの様子を示している。平均点を求めるトランザクションT1と, 登録作業のトランザクションT2が①~⑥の順序で処理された結果, 合計点算出時の受験者数と平均点算出時の受験者数が異なり, 正しい平均点を得ることができなかった。このとき発生した事象はどれか。ここで, トランザクションの隔離性水準はREAD UNCOMMITTEDであったとする。
問題画像
アンリピータブルリード
シーケンシャルリード
ダーティリード
ファントムリード(正解)

解説

ファントムリードの発生事象【午前2 解説】

要点まとめ

  • 結論:トランザクションT1の処理中にT2が新しい行を追加し、平均点算出時の受験者数が変わったため、ファントムリードが発生しました。
  • 根拠:隔離レベルがREAD UNCOMMITTEDであるため、T1はT2のコミット前後で異なる行セットを読み込み、整合性が崩れています。
  • 差がつくポイント:ファントムリードは「行の追加・削除による読み込み結果の変化」であり、単なる更新の読み込み違い(アンリピータブルリード)と区別することが重要です。

正解の理由

ファントムリードとは、トランザクション内で同じ検索条件のクエリを複数回実行した際に、途中で他のトランザクションが新しい行を追加・削除し、結果セットが変わってしまう現象です。
本問題では、T1が合計点と受験者数を別々に算出する間に、T2がA君の成績を登録しコミットしています。これにより、受験者数が変わり、平均点の計算結果が不整合となりました。
この現象はファントムリードに該当し、選択肢の中で唯一これを示す「エ」が正解です。

よくある誤解

ファントムリードは単なるデータの更新読み込み違いではなく、行の追加や削除による結果セットの変化を指します。
READ UNCOMMITTEDは最も低い隔離レベルであり、ダーティリードも起こり得ますが、本問題の現象はそれとは異なります。

解法ステップ

  1. トランザクションT1が合計点を算出(既存の登録済データを読み込む)
  2. トランザクションT2がA君の成績を登録し、コミットする
  3. T1が受験者数を算出する際、T2の追加データを含めて読み込む
  4. T1が合計点と受験者数の不一致により、正しい平均点を算出できないことを確認
  5. この現象がファントムリードであると判断する

選択肢別の誤答解説

  • ア: アンリピータブルリード
    同じ行のデータが更新されて読み込み結果が変わる現象であり、行の追加・削除による変化ではありません。
  • イ: シーケンシャルリード
    一般的な読み込み方法の一つであり、トランザクションの不整合を示す用語ではありません。
  • ウ: ダーティリード
    他トランザクションの未コミットデータを読み込む現象ですが、本問題ではT2はコミット済みであり該当しません。
  • エ: ファントムリード
    トランザクション内での複数回の検索結果が、他トランザクションの行追加・削除により変わる現象で正解です。

補足コラム

ファントムリードはデータベースのトランザクション隔離レベルにおいて重要な概念で、READ COMMITTEDやREPEATABLE READでは防止されることが多いです。
特に集計処理や複数行を対象とする検索条件を扱う場合、ファントムリードによる不整合を防ぐために適切なロックや隔離レベルの設定が必要です。

FAQ

Q: ファントムリードとアンリピータブルリードの違いは何ですか?
A: アンリピータブルリードは同じ行のデータが更新されて変わる現象、ファントムリードは行の追加・削除によって検索結果の行数が変わる現象です。
Q: READ UNCOMMITTEDの隔離レベルで起こりうる問題は?
A: ダーティリード、アンリピータブルリード、ファントムリードなど、ほぼすべての不整合が発生する可能性があります。

関連キーワード: トランザクション, ファントムリード, 隔離レベル, READ UNCOMMITTED, データベース整合性, 平均点算出, SQLトランザクション
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ