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

平成24年度 秋期 午前 問28

データベース

UNIQUE制約に関する問題

R 表に,(A,B)の 2 列で一意にする制約(UNIQUE 制約)が定義されているとき,R 表に対する SQL 文のうち,この制約に違反するものはどれか。ここで,R 表には主キーの定義がなく,また,全ての列は値が決まっていない場合(NULL)もあるものとする。

〔R 表〕
   A     | B     | C     | D
   AA01  | BB01  | CC01  | DD01
   AA01  | BB02  | CC02  | NULL
   AA02  | BB01  | NULL  | DD03
   AA02  | BB03  | NULL  | NULL
答えと解説を見る

✓ これが正解エUPDATE R SET A = 'AA02' WHERE A = 'AA01'

解説

A と B の組が既にあるかだけを見ます。

この設問で見るべきなのは A と B の二列の組だけで、C と D は制約に一切関わりません。まず現在の表から使用済みの組を書き出し、そのうえで各 SQL 文が新たに加える組や書き換える組をひとつずつ当て、使用済みとぶつかるかどうかを見ます。ここで効いてくる性質が二つあります。ひとつは、行が減る方向の操作では新しい組が持ち込まれないこと。もうひとつは、UNIQUE 制約は NULL どうしを同じ値として扱わないことです。値が決まっていないものは比較できないため、片方または両方が NULL である組は、既存のどの組とも同じとは判定されません。違反するのは、A の値を一括して書き換える更新です。条件に当てはまる行が二行あり、両方の A が同じ値へ変わるので、片方が既存の組と重なってしまいます。更新は複数の行が一度に動きますから、一行目だけを見て終わらせず、動いた行を全部書き出してください。一行でもぶつかれば、その SQL 文は違反します。

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

出典:平成24年度 秋期 応用情報技術者試験 午前 問28(改変:原典の図表をテキストに書き起こした)

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