平成27年春期試験問題 午前問28
問28解説へ
"学生"表が次のSQL文で定義されているとき,検査制約の違反となるSQL文はどれか。
CREATE TABLE 学生 (
学生番号 CHAR(5) PRIMARY KEY,
学部名 CHAR(16),
学部コード CHAR(4),
住所 CHAR(16),
CHECK (学生番号 LIKE 'K%'))
学生番号 CHAR(5) PRIMARY KEY,
学部名 CHAR(16),
学部コード CHAR(4),
住所 CHAR(16),
CHECK (学生番号 LIKE 'K%'))
広告
解説
検査制約は、テーブルに格納されるデータの種類を一定の範囲や種類に限定するための方法です。
検査制約を設けるには、CREATE TABLE文でテーブルを作成するときの属性(列)の定義を
CHECK(属性名 検査式)
という形式で記述することで、特定の列の値が任意の式を満たすように指定できます。
設問では"学生番号"列に LIKE 'K%'(Kから始まる任意の文字列)という制約が定義されているので、各SQL文がこれに反する操作を行っていないかを検証します。
検査制約を設けるには、CREATE TABLE文でテーブルを作成するときの属性(列)の定義を
CHECK(属性名 検査式)
という形式で記述することで、特定の列の値が任意の式を満たすように指定できます。
設問では"学生番号"列に LIKE 'K%'(Kから始まる任意の文字列)という制約が定義されているので、各SQL文がこれに反する操作を行っていないかを検証します。
- "学生番号"が"K1002"の行を削除する操作です。問題はありません。
- 正しい。追加されるデータの1つ目(学生番号になる)が"J2002"で、先頭が"K"ではないため検査制約違反となります。
- "学生番号"が"K1001"の行のすべての列を抽出する操作です。問題はありません。
- "学生番号"が"K"で始まる行の"学部コード"をN001に更新する操作です。問題はありません。
広告