応用情報技術者平成27年春期 午前問28

問28

"学生"表が次のSQL文で定義されているとき,検査制約の違反となるSQL文はどれか。

CREATE TABLE 学生 (
 学生番号 CHAR(5) PRIMARY KEY,
 学生名 CHAR(16),
 学部コード CHAR(4),
 住所 CHAR(16),
 CHECK (学生番号 LIKE 'K%'))
28.png/image-size:314×113
  • DELETE FROM 学生 WHERE 学生番号 = 'K1002'
  • INSERT INTO 学生 VALUES ('J2002','渡辺次郎','M006','東京都')
  • SELECT * FROM 学生 WHERE 学生番号 = 'K1001'
  • UPDATE 学生 SET 学部コード = 'N001' WHERE 学生番号 LIKE 'K%'

分類

テクノロジ系 » データベース » データ操作

正解

解説

検査制約は、テーブルに格納されるデータの範囲や種類を限定するための規則です。データの追加や更新時に値が条件を満たすかをチェックし、有効ではないデータの場合はエラーを返します。

検査制約を追加するには、テーブルを作成するCREATE TABLE文内にCHECK(…)の文を記述します。検査制約には、属性定義内にCHECK (検査式)の書式で記述する列制約と、表定義の最後にCHECK (属性名 検査式)の書式で記述する表制約があります。列制約はその列単独で検査するのに対し、表制約は1つ以上の列の値を組み合わせた制約を定義できます。設問の検査制約は表制約に当たります。

設問では、"学生番号"列に CHECK (学生番号 LIKE 'K%')(Kから始まる任意の文字列)という検査制約が追加されています。このため、"学生番号"列の値はKから始まる文字列に限定されます。各SQL文がこれに反する操作を行っていないかを検証します。
  • 学生番号が'K1002'の行を削除する操作です。挿入・更新ではないので検査制約は作用しません。
  • 正しい。学生番号が'J2002'である行を追加しようとしています。学生番号の先頭が"K"ではないため、検査制約違反となります。
  • 学生番号が'K1001'である行を取得する操作です。挿入・更新ではないので検査制約は作用しません。
  • 学生番号が'K'で始まる行の学部コードを'N001'に更新する操作です。問題はありません。
© 2010- 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop