問題
“商品”表に対してデータの更新処理が正しく実行できる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
キーボード:1〜4で選択・Enterで次へ
答え合わせ
- A
- B
- C
- D
自信の3択
えらぶと、この端末に記録します(登録はいりません)
解説
答えは d「UPDATE 商品 SET 商品名 = 'D' WHERE 商品番号 = 'S003'」 です。
この表は 商品番号が主キー。主キーには「同じ値を二つ置けない・空(NULL)にできない」という決まりがあります。
d は主キーではない「商品名」を S003 の1行だけ書き換えるので、決まりに引っかからず正しく実行できます。
👉 覚え方:主キーは「重複NG・NULL NG」。主キーを書き換える選択肢は要注意。
ほかの選択肢:a S001 はもうあるので重複/b 商品名 C は S004 と S005 の2行あり、両方 S006 になって重複/c 主キーを NULL にはできない。
なぜこれが正解か
正解は d。“商品”表は `PRIMARY KEY(商品番号)` で定義されているので、商品番号には一意性(重複不可)と非NULLの制約がかかる。UPDATE文は、更新後の表がこの制約を満たすときだけ正しく実行される。d は主キーでない「商品名」を S003 の1行だけ 'D' に変えるので、どの制約にも違反しない。
各選択肢の解説
- a:S002 の商品番号を 'S001' に変えると、既存の S001 と重複する → 一意性制約違反でエラー。
- b:WHERE 商品名 = 'C' に当てはまるのは S004 と S005 の2行。両方を 'S006' にすると 'S006' が2行でき重複 → 一意性制約違反。S006 が表にまだ無いことに惑わされない。
- c:主キー列に NULL は入れられない → 非NULL制約違反。
- d:正解。主キー以外の列の更新で、対象も1行に特定されている。
覚え方・ひっかけ注意
主キー=一意(UNIQUE)+非NULL(NOT NULL)。主キー列を書き換えるUPDATEは「更新後に重複・NULLが生じないか」を必ず確認する。特にWHERE句が主キー以外の列(商品名など)のときは、何行が対象になるかを表で数えるのがコツ。
理論的背景
関係モデルの整合性制約のうち、主キーに関わるものを実体整合性(エンティティ完全性)という。主キーは各行を一意に識別するための列(または列の組)で、SQLでは `PRIMARY KEY` を宣言すると UNIQUE+NOT NULL が同時に課される。DBMSは INSERT・UPDATE のたびにこの制約を検査し、違反すると文全体を取り消してエラーを返す。
SQL標準では、制約は1行ずつではなく文の実行が終わった時点の表に対して検査する考え方をとる(製品によっては行ごとに検査するものもある)。b のように複数行を同じ値に書き換える文は、どちらの検査方式でも更新後に 'S006' が2行そろうため違反になる。
実務での使われ方
- 主キーには業務上変わらない値を選ぶのが原則。商品コードの体系変更のように変わり得る値を主キーにすると、本問の a・b のような更新が業務で必要になり、その値を参照している表(外部キー)にまで影響が広がる。
- そのため実務では、意味を持たない連番やUUIDを代理キーとして主キーにし、商品番号は UNIQUE 制約付きの別の列として持つ設計がよく使われる。
- 外部キーで参照されている主キーを更新する場合は、`ON UPDATE CASCADE`(参照側も連動して更新)や `RESTRICT`(更新を拒否)の指定で振る舞いが決まる(参照整合性)。
試験での位置づけ
「正しく実行できるSQL文はどれか」「制約違反になるのはどれか」は旧午前・科目Aの定番。主キー(一意・非NULL)、外部キー(参照先に存在する値か NULL)、CHECK 制約の3つを、表の具体的な値と突き合わせて判定させる形式が多い。データベーススペシャリストでは、正規化や更新時異状(更新・挿入・削除の異状)と組み合わせて問われる。
選択肢の発展補足
- a:既存値との重複。一意性制約違反の最も基本的な形。
- b:WHERE句が主キー以外の列のため複数行が対象になり、同じ値を代入して重複が生じる形。対象行数を数えないと見落とす。
- c:NULL の代入。主キー以外の列でも `NOT NULL` が指定されていれば同様に違反する。
- d:主キー以外の列の更新。商品名には UNIQUE 制約が無いので、仮に既存の商品名と同じ値にしても違反にはならない。
出典と作り方
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成22年度 秋期 問31/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビ独自の3段階の解説(初級・標準・上級)です。

