平成25年度 秋期 午前 問31
データベース
デッドロックに関する問題
“商品”表に対して,更新 SQL 文を実行するトランザクションが,デッドロックの発生によって異常終了した。異常終了後の“商品”表はどれか。ここで,“商品”表に対する他のトランザクションは,参照は行うが更新はしないものとする。
〔商品〕
| 商品コード | 商品名 | 販売単価 |
|---|---|---|
| A010 | AAA | 2,500 |
| B020 | BBB | 1,000 |
| C030 | CCC | 4,500 |
〔更新 SQL 文〕
DELETE FROM 商品 WHERE 商品コード = 'B020'
〔4つの肢はいずれも“商品”表です〕表の中身を字に書き起こしたもの。
- アA010/AAA/2,500・B020/NULL/1,000・C030/CCC/4,500(B020 の商品名だけ NULL になった表)
- イA010/AAA/2,500・B020/BBB/1,000・C030/CCC/4,500(元の表のまま・3 行)
- ウA010/AAA/2,500・C030/CCC/4,500(B020 の行が消えた表・2 行)
- エB020/BBB/1,000(B020 の行だけが残った表・1 行)
答えと解説を見る
✓ これが正解イA010/AAA/2,500・B020/BBB/1,000・C030/CCC/4,500(元の表のまま・3 行)
解説
異常終了した更新は取り消され表は実行前に戻ります。
デッドロックは、二つ以上のトランザクションが互いの押さえているデータの解放を待ち合い、どちらも先へ進めなくなった状態です。このままでは止まったままなので、一方が強制的に打ち切られます。打ち切られたトランザクションが途中まで行った更新は、すべて取り消されて実行前の状態へ戻されます。一つのトランザクションの更新は、全部を反映するか一つも反映しないかのどちらかにする、という決まりがあるからです。設問の場合は削除が取り消されるので、商品コードが B020 の行を含む三行がそのまま残ります。さらに設問は、ほかのトランザクションが参照しかしないと断っています。この一言があるおかげで、戻る先が最初に示された表そのものだと言い切れます。判定の軸は、打ち切られた更新の一部が残りうるかどうかです。
ほかの選択肢はなぜ違うのか
- アA010/AAA/2,500・B020/…:商品コードが B020 の行について、商品名だけが空になった表です。行を取り除く操作は行ごとまとめて消すものなので、特定の列の値だけが失われる形にはなりません。
- ウA010/AAA/2,500・C030/…:商品コードが B020 の行が無くなった表で、これは削除が最後まで通ったときの姿です。トランザクションは異常終了しているのですから、更新の結果が残っていることはありません。
- エB020/BBB/1,000(B020 …:商品コードが B020 の行だけが残った表です。条件に当てはまる行のほうを残して残りを消した形であり、条件に当てはまる行を取り除くという指示と結果が入れ替わっています。
この問題の用語
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:平成25年度 秋期 基本情報技術者試験 午前 問31(改変:原典の図表をテキストに書き起こした)
同じ用語が出る問題
- 令和6年度 科目A 問7:原子性に関する問題(トランザクション)
- 令和5年度 科目A 問7:ACIDに関する問題(トランザクション)
- 令和元年度 秋期 午前 問29:ロックが発生しないデータ処理順序(トランザクション)
- 令和元年度 秋期 午前 問28:取ることのない状態遷移(トランザクション)
- 平成30年度 秋期 午前 問55:キャパシティ管理に関する問題(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)