平成27年度春期 応用情報技術者試験 午前 問28
“学生”表が次のSQL文で定義されているとき,検査制約の違反となるSQL文はどれか。CREATE TABLE 学生 ( 学生番号 CHAR(5) PRIMARY KEY, 学生名 CHAR(16), 学部コード CHAR(4), 住所 CHAR(16), CHECK (学生番号 LIKE 'K%'))。学生表:K1001 田中太郎 E001 東京都/K1002 佐藤一美 E001 茨城県/K1003 高橋肇 L005 神奈川県/K2001 伊藤香織 K007 埼玉県
- ア DELETE FROM 学生 WHERE 学生番号 = 'K1002'
- イ INSERT INTO 学生 VALUES ('J2002','渡辺次郎','M006','東京都')
- ウ SELECT * FROM 学生 WHERE 学生番号 = 'K1001'
- エ UPDATE 学生 SET 学部コード = 'N001' WHERE 学生番号 LIKE 'K%'
解答・解説を見る
正解:イ
AI解説
検査制約(CHECK制約)は、行の挿入・更新時に指定条件を満たすかを検査する仕組みである。本問ではCHECK(学生番号 LIKE 'K%')により学生番号はKで始まらなければならない。'J2002'を挿入するINSERT文はこの条件に違反するため、イが正解である。 ア: DELETEは行を削除する操作であり、新たな値の検査は発生しないためCHECK制約違反にはならない。 イ: 正解。挿入しようとする学生番号'J2002'はKで始まっておらず、CHECK(学生番号 LIKE 'K%')の検査制約に違反する。 ウ: SELECTはデータを参照するだけでデータベースの内容を変更しないため、制約の検査対象外である。 エ: 更新するのは学部コード列であり、CHECK制約の対象である学生番号は変更されないため違反しない。 💡 CHECK制約が働くのはINSERTとUPDATEのとき。PRIMARY KEY(一意+非NULL)、FOREIGN KEY(参照整合性)、CHECK(値の条件)の各制約が何を検査するかを区別して覚える。
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。