基本情報技術者試験過去問 令和8年度(2026年)科目A問7
次のSQL文によって定義され,値が格納されている“商品”表に対して,制約違反で実行エラーとなるSQL文はどれか。
〔SQL 文〕
CREATE TABLE 商品
(商品コード CHAR(4) PRIMARY KEY, 商品名 VARCHAR(21),
仕入先コード CHAR(4), 仕入単価 INT, 在庫数 INT)

選択肢
- ア:DELETE FROM 商品 WHERE 仕入先コード IS NULL
- イ:INSERT INTO 商品 VALUES ('A555', '空気清浄機', 'S005', 60000, 50)
- ウ:UPDATE 商品 SET 商品コード = 'A666' WHERE 商品コード = 'A444'
- エ:UPDATE 商品 SET 商品コード = 'A777' WHERE 在庫数 >= 20
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
PRIMARY KEY制約が設定された列は、NULLが禁止され、かつ値の重複が禁止されます。本問では商品コードがPRIMARY KEYです。「エ」は在庫数が20以上の複数行を対象に、商品コードを同じ値'A777'へ更新します。その結果、商品コードが重複し、PRIMARY KEYの一意性制約に違反するため実行エラーになります。
Point
PRIMARY KEY制約が持つ性質(NULL不可、重複不可)を前提に、INSERT、UPDATE、DELETEの実行結果が制約違反になるかをSQL文の条件(WHERE句)から判断できるようにすることがねらいです。
解くために必要な知識
この問題を解くには、PRIMARY KEY制約の意味と、DELETE、INSERT、UPDATEがデータに与える影響を理解している必要があります。
用語の整理
| 用語 | 意味 |
|---|---|
| PRIMARY KEY(主キー) | テーブル内の各行を一意に識別するための列(または列の組)です。NULLが禁止され、値の重複も禁止されます。 |
| 一意性制約 | 同じ値が複数行に存在してはいけないという制約です。 |
| NOT NULL制約 | NULLを格納してはいけないという制約です。PRIMARY KEYには試験上この性質が含まれるものとして扱われます。 |
| INSERT | 新しい行を追加します。主キー列に既存と同じ値を入れるとエラーになります。 |
| UPDATE | 既存行の値を変更します。主キー列を変更する場合、更新対象が複数行だと重複を作りやすくなります。 |
| DELETE | 行を削除します。削除は通常、主キーの重複を新たに作らないため、主キー制約違反の原因になりにくいです。 |
| WHERE句 | 対象行を条件で絞り込みます。UPDATEで複数行に同じ主キー値を設定すると制約違反になり得ます。 |
問題の解法手順
解く手順
1. 表定義から制約を確認する
商品コードがPRIMARY KEYです。
2. PRIMARY KEYのルールを確認する
-
NULLにできません。
-
重複できません。
3. 各SQLが影響する行を確認する
問題文の“商品”表の現在データを見て、WHERE句に該当する行数を確認します。
4. 実行後に商品コードが重複しないかを確認する
-
INSERTは、追加する商品コードが既存と重複しないかを確認します。
-
UPDATEは、更新後に次のどちらかが起きないかを確認します。
- 既存行と商品コードが重複する
- 更新対象の複数行同士で商品コードが重複する
-
DELETEは、商品コードの重複を新しく作れないため、PRIMARY KEY違反になりにくいです。
選択肢ごとの解説
- ア:不正解
仕入先コードがNULLの行(A333)を削除します。削除によって商品コードの重複やNULLが新たに発生することはないため、実行エラーにはなりません。
- イ:不正解
商品コード'A555'の行を追加します。既存の主キー(A111、A222、A333、A444)と重複しないため、実行エラーにはなりません。
- ウ:不正解
商品コード'A444'の1行を'A666'に更新します。更新後の主キーが既存と重複しないため、実行エラーにはなりません。
- エ:正解
在庫数>=20に該当する複数行(A222、A444)の商品コードをどちらも'A777'に更新します。主キーが重複するため、PRIMARY KEY制約違反で実行エラーになります。
まとめ
PRIMARY KEY制約が設定された列は、NULLが禁止され、かつ値の重複が禁止されます。本問では商品コードがPRIMARY KEYです。「エ」は在庫数が20以上の複数行を対象に、商品コードを同じ値'A777'へ更新します。その結果、商品コードが重複し、PRIMARY KEYの一意性制約に違反するため実行エラーになります。
仕入先コードがNULLの行(A333)を削除します。削除によって商品コードの重複やNULLが新たに発生することはないため、実行エラーにはなりません。
商品コード'A555'の行を追加します。既存の主キー(A111、A222、A333、A444)と重複しないため、実行エラーにはなりません。
商品コード'A444'の1行を'A666'に更新します。更新後の主キーが既存と重複しないため、実行エラーにはなりません。
在庫数>=20に該当する複数行(A222、A444)の商品コードをどちらも'A777'に更新します。主キーが重複するため、PRIMARY KEY制約違反で実行エラーになります。