過去問解きまくり研究所 ホーム

平成27年度 春期 午前 問28

データベース

検査制約の違反となるSQL文

“学生”表が次の 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埼玉県
答えと解説を見る

✓ これが正解イINSERT INTO 学生 VALUES ('J2002','渡辺次郎','M006','東京都')

解説

学生番号にKで始まらない値を入れる文が違反です。

設問は、定義された検査制約に違反するSQL文を選ばせています。定義文の末尾に置かれた検査制約は、学生番号がKで始まることを求めています。見張っているのはこの列だけですから、仕分ける線は二本です。まず、その文が学生番号に値を書き込むものかどうか。次に、書き込もうとしているその値がKで始まるかどうかです。四つのうち学生番号に値を書き込むのは一つだけで、新しい行を挿入してJ2002という値を入れようとする文がそれにあたります。先頭の1文字はJですから、Kで始まるという条件を満たさず、これが違反になります。あわせて、この値が主キーの重複にあたらないことも見ておきます。表にある四つの学生番号のどれとも一致しないので、落ちる理由は検査制約だけです。設問が検査制約と限って述べているのは、この取り違えを避けるためです。制約を問う問題は、まず値が入る文かどうかで仕分けると速く決まります。

ほかの選択肢はなぜ違うのか

出典:平成27年度 春期 応用情報技術者試験 午前 問28

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)