修了試験 2018-07-22実施分 基本情報技術者試験 問29
"商品"表に対して,更新SQL文を実行するトランザクションが,デッドロックの発生によって異常終了した。 異常終了後の"商品"表はどれか。 ここで,"商品"表に対する他のトランザクションは,参照は行うが更新はしないものとする。 商品表(更新前) 商品コード|商品名|販売単価 A010|AAA|2,500 B020|BBB|1,000 C030|CCC|4,500 〔更新SQL文〕 DELETE FROM 商品 WHERE 商品コード = 'B020'
正答2
解説
正解は2です。 デッドロックが発生すると、DBMSは関係するトランザクションの一方を異常終了させ、ロールバックします。 ロールバックにより、そのトランザクションが行った更新はすべて取り消されます。 したがって、DELETE文は反映されず、"商品"表は更新前の状態のままです。 【選択肢別解説】 1:× B020の商品名がNULLになった表ですが、DELETE文は商品名をNULLにする処理ではありません。 しかも異常終了でロールバックされるので、更新前と変わりません。 2:○ 異常終了したトランザクションはロールバックされ、更新前の3行(A010、B020、C030)がそのまま残ります。 3:× B020の行が削除された表は、DELETE文が正常に完了(コミット)した場合の結果です。 異常終了したので削除は取り消されます。 4:× B020の行だけが残る表は、B020以外を削除した結果です。 DELETE文の条件とも、ロールバック後の状態とも一致しません。 【ポイント】 デッドロックは、複数のトランザクションが互いに相手のロック解除を待って進めなくなる状態です。 異常終了したトランザクションの更新は、原子性によって「なかったこと」になります。まとめて解く
修了試験 2018-07-22実施分を通しで解く(80問)→