平成22年度 秋期 基本情報技術者試験 午前 問31
テクノロジ/データベース"商品"表に対してデータの更新処理が正しく実行できる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 (注:本サイトでは原問題の表を文字表記に変換しています)
出典:平成22年度 秋期 基本情報技術者試験 午前 問31
- アUPDATE 商品 SET 商品番号 = 'S001' WHERE 商品番号 = 'S002'
- イUPDATE 商品 SET 商品番号 = 'S006' WHERE 商品名 = 'C'
- ウUPDATE 商品 SET 商品番号 = NULL WHERE 商品番号 = 'S002'
- エUPDATE 商品 SET 商品名 = 'D' WHERE 商品番号 = 'S003'
正解:エ
解説
"商品"表では商品番号が主キーとして定義されているため,一意性制約(重複禁止)とNOT NULL制約が課されます。商品名はキー制約のない一般の列なので,単純にSET句で値を書き換えるUPDATE文は問題なく実行できます。
選択肢ごとの解説
- ア誤り。既にS001という商品番号が存在するため,S002の商品番号をS001に変更すると主キーの重複(一意性制約違反)になり,実行できません。
- イ誤り。商品名='C'に該当する行はS004とS005の2行あるため,両方の商品番号を同じS006に変更しようとすると主キーが重複してしまい,実行できません。
- ウ誤り。商品番号は主キーであるためNOT NULL制約が課されており,NULLに更新することはできません。
- エ正しい。商品名はキー制約のない列なので,該当する1行の商品名を書き換えるこのUPDATE文は問題なく実行できます。