ホーム > データベーススペシャリスト試験 > 2019年

データベーススペシャリスト試験 2019年 午前209


トランザクションの隔離性水準のうち, 次の(1), (2)に該当するSQLの指定はどれか。
(1)対象の表のダーティリードは回避できる。 (2)一つのトランザクション中で, 対象の表のある行を2回以上参照する場合, 1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。
READ COMMITTED(正解)
REPEATABLE READ
READ UNCOMMITTED
SERIALIZABLE

解説

トランザクションの隔離性水準に関する解説

トランザクションの隔離性 (Isolation) は、複数のトランザクションが同時に実行される場合でも、データの一貫性を維持するための重要な特性です。SQL標準では、隔離性のレベルとして主に以下の4つが定義されています。
隔離レベル和名特徴
READ UNCOMMITTED未コミット読込他トランザクションの未コミットな変更を読み込む可能性がある(ダーティリードが発生する)
READ COMMITTEDコミット読込他トランザクションがコミットしたデータのみ読み込むため、ダーティリードが防止できる
REPEATABLE READ繰り返し読込トランザクション中で同じ行を読み返しても結果が変わらない(ファントムリードは発生する可能性あり)
SERIALIZABLE直列化可能最も厳密な隔離レベルで、すべてのトランザクションが直列に実行されたかのように振る舞う

問題の内容

(1) 対象の表のダーティリードは回避できる。

  • ダーティリードとは、他のトランザクションがコミットしていない段階で行った変更を読んでしまう現象です。
  • これを防止できるのは READ COMMITTED 以上の隔離レベルです。

(2) 一つのトランザクション中で、対象の表のある行を2回以上参照する場合、1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。

  • これは、同じトランザクション中に同じ行を2回読み込んだ際に、異なる値になる可能性がある状態で、いわゆる「ノンリピータブルリード(不可繰り返し読み込み)」という問題です。
  • READ COMMITTED はダーティリードを防ぐものの、同一行の再読込みが保証されないため、この問題が発生します。

選択肢の確認と解説

選択肢設定値ダーティリード回避同じ行の再読込みでの保証(繰り返し読込)
READ COMMITTED回避可能保証されない(ノンリピータブルリード発生)
REPEATABLE READ回避可能保証される
READ UNCOMMITTED回避不可保証されない
SERIALIZABLE回避可能完全に保証される

正解の理由(ア: READ COMMITTED)

  • (1)ではダーティリードが回避できることが条件ですので、READ UNCOMMITTEDは不適切です。
  • (2)では2回目以降の読み込みで値が変わる可能性があることが条件なので、REPEATABLE READやSERIALIZABLEは不適切です(それらは同じ読み込み値を保証)。
  • よって、(1)と(2)の条件をいずれも満たすのは READ COMMITTED(ア)となります。

まとめ

  • READ COMMITTED は、他のトランザクションの未コミットデータを読むこと(ダーティリード)を防止するが、同じ行の複数回読み込みで異なる結果を読み込むことがありえます(ノンリピータブルリードが発生)。
  • 他の隔離レベルとの違いを理解することで、目的に合ったトランザクションの隔離性を選択することが重要です。
← 前の問題へ次の問題へ →

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