検査制約 (CHECK) の違反
出典: 平成27年度 春期 応用情報技術者試験 午前 問28 (IPA)
“学生”表が次の 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%'
正解と解説を見る
正解: イ
- ア: 行を削除するだけなので、検査制約には違反しません。
- イ: 学生番号 J2002 は K で始まらないため、検査制約に違反します。正しい答えです。
- ウ: 参照するだけの SELECT 文は、制約に違反しません。
- エ: 学部コードを更新するだけで、学生番号は変わらないので違反しません。
ポイント
- 表には CHECK (学生番号 LIKE 'K%') という制約があり、学生番号は K で始まる値に限られます。
- INSERT で学生番号 'J2002' を追加すると、K で始まらないので 検査制約に違反 します。
- DELETE、SELECT は制約を検査する対象の行を追加・変更しません。UPDATE は学部コードだけを変更し、学生番号は変わりません。