主キー制約違反によるSQL実行エラー

正解は「エ」です。 商品表の定義文において、`商品コード` 列には主キー制約(PRIMARY KEY)が設定されています。主キー制約には「一意性制約(UNIQUE:値が重複してはならない)」と「非NULL制約(NOT NULL:NULL値であってはならない)」が含まれます。 選択肢エのSQL文「`UPDATE 商品 SET 商品コード = 'A777' WHERE 在庫数 >= 20`」を実行した場合: 商品表において `在庫数 >= 20` の条件を満たす行は、商品コード `A222`(在庫数50)と `A444`(在庫数20)の **2行** 存在します。この2行の `商品コード` が同時に `'A777'` に更新されるため、主キー列に同一の値 `'A777'` が重複して登録されることになり、**主キーの一意性制約違反(Duplicate Key)** によって実行エラーが発生します。 `仕入先コード IS NULL` の行(A333)を1行削除するSQL文です。削除によって制約違反は発生せず、正常に完了します。 新たな商品コード `'A555'` の行を挿入するSQL文です。商品コード `'A555'` は既存のデータ(A111〜A444)と重複しないため、正常に挿入されます。 商品コード `'A444'` の行を `'A666'` に更新するSQL文です。対象は1行のみであり、既存の商品コードとも重複しないため、正常に更新されます。

次のSQL 文によって定義され,値が格納されている“商品”表に対して,制約違反で実行エラーとなるSQL 文はどれか。

〔SQL 文〕

CREATE TABLE 商品
(商品コード CHAR(4) PRIMARY KEY, 商品名 VARCHAR(21),
 仕入先コード CHAR(4), 仕入単価 INT, 在庫数 INT)

商品

商品コード

商品名

仕入先コード

仕入単価

在庫数

A111

テレビ

S001

75,000

0

A222

デジタルカメラ

S002

50,000

50

A333

DVDプレーヤ

NULL

NULL

NULL

A444

洗濯機

S004

45,000

20

出典令和8年度 基本情報技術者試験 科目A 問7
ア
DELETE FROM 商品 WHERE 仕入先コード IS NULL
イ
INSERT INTO 商品 VALUES ('A555', '空気清浄機', 'S005', 60000, 50)
ウ
UPDATE 商品 SET 商品コード = 'A666' WHERE 商品コード = 'A444'
エ
UPDATE 商品 SET 商品コード = 'A777' WHERE 在庫数 >= 20