基本情報技術者

問7

基本情報技術者試験過去問 令和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の一意性制約に違反するため実行エラーになります。

不正解

仕入先コードがNULLの行(A333)を削除します。削除によって商品コードの重複やNULLが新たに発生することはないため、実行エラーにはなりません。

不正解

商品コード'A555'の行を追加します。既存の主キー(A111、A222、A333、A444)と重複しないため、実行エラーにはなりません。

不正解

商品コード'A444'の1行を'A666'に更新します。更新後の主キーが既存と重複しないため、実行エラーにはなりません。

正解

在庫数>=20に該当する複数行(A222、A444)の商品コードをどちらも'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の一意性制約に違反するため実行エラーになります。

順次、単語を追加予定です。もうしばらくお待ちください。