修了試験 2016-06-12実施分 基本情報技術者試験 問30
“商品”表に対して,更新SQL文を実行するトランザクションが,デッドロックの発生によって異常終了した。 異常終了後の“商品”表はどれか。 ここで,“商品”表に対する他のトランザクションは,参照は行うが更新はしないものとする。 商品 商品コード|商品名|販売単価 A010|AAA|2,500 B020|BBB|1,000 C030|CCC|4,500 〔更新SQL文〕 DELETE FROM 商品 WHERE 商品コード = 'B020'
正答2
解説
正解は2です。 トランザクションは、全て実行されるか、全く実行されないかのどちらかでなければなりません。 この性質を原子性といいます。 デッドロックで異常終了したトランザクションはロールバックされ、実行前の状態に戻ります。 本問では、B020の行を削除するDELETE文が取り消されます。 他のトランザクションは参照だけで更新しないので、表は元の3行のままです。 【選択肢別解説】 1:× B020の商品名だけがNULLになった表で、DELETE文の結果としても、元の状態としても起こりません。 2:○ ロールバックによって、A010、B020、C030の3行が残る元の状態に戻ります。 3:× B020が削除された表で、トランザクションが正常に終了(コミット)した場合の結果です。 4:× B020だけが残った表で、削除対象と逆の行が消えており、起こり得ません。 【ポイント】 異常終了したトランザクションの更新は、ログの更新前情報を使って取り消されます。 これをロールバック(後退復帰)といいます。まとめて解く
修了試験 2016-06-12実施分を通しで解く(80問)→