平成22年度 秋期 午前 問31
データベース
UPDATE文
"商品" 表に対してデータの更新処理が正しく実行できる UPDATE 文はどれか。ここで,"商品" 表は次の CREATE 文で定義されている。
CREATE TABLE 商品
(商品番号 CHAR(4), 商品名 CHAR(20), 仕入先番号 CHAR(6), 単価 INT,
PRIMARY KEY(商品番号))
商品
| 商品番号 | 商品名 | 仕入先番号 | 単価 |
|---|---|---|---|
| S001 | A | XX0001 | 18000 |
| S002 | A | YY0002 | 20000 |
| S003 | B | YY0002 | 35000 |
| S004 | C | ZZ0003 | 40000 |
| S005 | C | XX0001 | 38000 |
- アUPDATE 商品 SET 商品番号 = 'S001' WHERE 商品番号 = 'S002'
- イUPDATE 商品 SET 商品番号 = 'S006' WHERE 商品名 = 'C'
- ウUPDATE 商品 SET 商品番号 = NULL WHERE 商品番号 = 'S002'
- エUPDATE 商品 SET 商品名 = 'D' WHERE 商品番号 = 'S003'
答えと解説を見る
✓ これが正解エUPDATE 商品 SET 商品名 = 'D' WHERE 商品番号 = 'S003'
解説
主キーが重ならず空にもならない更新だけ通ります。
商品表は、CREATE 文の PRIMARY KEY で商品番号を主キーとして定義されています。主キーには決まりが二つあります。同じ値が二つ以上の行に現れてはいけないことと、値が空であってはいけないことです。UPDATE 文が実行できるかどうかは、更新したあとの表がこの二つを保てるかで決まります。ですから、まず表の中身からどの行が更新の対象になるかを数え、次にその行の主キーの列が更新後にどんな値になるかを並べて確かめます。設問の表は五行あり、商品番号はすべて異なる一方、商品名には同じ値を持つ行が含まれています。判定の軸はここです。主キーの列に触れる更新なら、更新後の値がほかの行と衝突しないか、空にならないかを見ます。主キー以外の列だけを変える更新なら、この二つの決まりに触れません。
ほかの選択肢はなぜ違うのか
- アUPDATE 商品 SET 商品番号 =…:書き換えたあとの値と同じ商品番号を持つ行が、表にもとから存在します。同じ値が二つの行に並ぶことになるため、この文は受け付けられません。
- イUPDATE 商品 SET 商品番号 =…:条件に当てはまる行が表に二つあり、どちらも同じ商品番号へ書き換わります。一度の実行で同じ値の行が二つできてしまうので、実行できません。
- ウUPDATE 商品 SET 商品番号 =…:行を一意に指し示す役目を担う列を、空の状態にしようとしています。どの行かを決められなくなるため、この列に空の値を入れることは認められていません。
出典:平成22年度 秋期 基本情報技術者試験 午前 問31(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)