平成25年度 秋期 基本情報技術者試験 午前 問31
テクノロジ/データベース“商品”表に対して,更新SQL文を実行するトランザクションが,デッドロックの発生によって異常終了した。異常終了後の“商品”表はどれか。ここで,“商品”表に対する他のトランザクションは,参照は行うが更新はしないものとする。 商品:商品コードA010,商品名AAA,販売単価2,500 / 商品コードB020,商品名BBB,販売単価1,000 / 商品コードC030,商品名CCC,販売単価4,500 〔更新SQL文〕 DELETE FROM 商品 WHERE 商品コード = 'B020' (注:本サイトでは原問題の表を文字表記に変換しています)
出典:平成25年度 秋期 基本情報技術者試験 午前 問31
- ア商品コードA010,商品名AAA,販売単価2,500 / 商品コードB020,商品名NULL,販売単価1,000 / 商品コードC030,商品名CCC,販売単価4,500
- イ商品コードA010,商品名AAA,販売単価2,500 / 商品コードB020,商品名BBB,販売単価1,000 / 商品コードC030,商品名CCC,販売単価4,500
- ウ商品コードA010,商品名AAA,販売単価2,500 / 商品コードC030,商品名CCC,販売単価4,500
- エ商品コードB020,商品名BBB,販売単価1,000
正解:イ
解説
デッドロックが発生してトランザクションが異常終了した場合,データベース管理システムはそのトランザクションが行った更新を全て取り消すロールバック処理を行います。したがって,DELETE文の実行前の状態,すなわち商品コードB020を含む3行がそのまま残った状態に戻ります。
選択肢ごとの解説
- ア誤り。商品名がNULLになった状態は,本来のロールバック処理では発生しません。デッドロック時は更新前の値がそのまま復元されます。
- イ正しい。異常終了時はロールバックによって更新前の状態に戻るため,A010,B020,C030の3行がそのまま残った状態になります。
- ウ誤り。B020の行が削除された状態は,DELETE文が正常にコミットされた場合の結果であり,異常終了時の状態ではありません。
- エ誤り。B020の行だけが残っている状態は,本問のいずれの処理結果とも整合しません。