データベース
トランザクション分離レベルに関して、READ COMMITTEDとSERIALIZABLEの違いを正しく説明しているものはどれか。
ア.READ UNCOMMITTEDは他トランザクションのコミット前データも読めるため、最も整合性が高い分離レベルである。
イ.READ COMMITTEDはすべてのトランザクション異常を防ぐ最も安全なレベルであり、SERIALIZABLEは古い互換性のために残された低いレベルである。
ウ.SERIALIZABLEはトランザクションをランダムな順序で実行するため、一貫性より可用性を優先したシステムに向いている。
エ.READ COMMITTEDはコミット済みデータのみ読み取るためダーティリードは防げるが、ファントムリードや反復不能読み取りが発生する可能性がある。SERIALIZABLEはすべての異常を防ぐ最高レベルだが、並行性能が下がる。正解
解説
分離レベルは「他人の作業をどこまで見えてしまうか」の設定。READ UNCOMMITTED(何でも見える)→READ COMMITTED→REPEATABLE READ→SERIALIZABLE(完全に壁で仕切られた個室)の順で安全になるが、並行処理の効率は下がる。
なぜ エ が正解か
エが正解。READ COMMITTEDはコミット済みデータのみ読むためダーティリード(未コミットデータ読み取り)を防ぐ。しかし同一トランザクション内で同じSELECTを2回実行すると結果が変わる(反復不能読み取り)や、他トランザクションのINSERTで行数が変わる(ファントムリード)は防げない。SERIALIZABLEはロックで直列化を保証し全異常を防ぐが、デッドロックリスクと性能低下がある。
出典: AI生成問題(学習用)