平成22年度 春期 データベーススペシャリスト試験 午前II 問3
【問題3】
表 R に、(A, B) の 2 列でユニークにする制約(UNIQUE 制約)が定義されているとき、表 R に対する SQL 文でこの制約の違反となるものはどれか。ここで、表 R には主キーの定義がなく、また、すべての列は値が決まっていない場合(NULL)もあるものとする。

DELETE FROM R WHERE A = 'AA01’ AND B = 'BB02’
INSERT INTO R VALUES ('AA01’, NULL, 'DD01’, 'EE01’)
INSERT INTO R VALUES (NULL, NULL, 'AA01’, 'BB02’)
UPDATE R SET A = 'AA02’ WHERE A = 'AA01’
【解説】
UNIQUE 制約は、指定された列の組み合わせがすべての行で一意であることを保証します。ただし、NULL 値は一意性チェックの対象外となります。
ア: DELETE FROM R WHERE A = 'AA01’ AND B = 'BB02’
正しい操作。行を削除するだけなので UNIQUE 制約違反にはなりません。
イ: INSERT INTO R VALUES ('AA01’, NULL, 'DD01’, 'EE01’)
正しい操作。NULL が含まれるため UNIQUE 制約違反にはなりません。
ウ: INSERT INTO R VALUES (NULL, NULL, 'AA01’, 'BB02’)
正しい操作。NULL が含まれるため UNIQUE 制約違反にはなりません。
エ: UPDATE R SET A = 'AA02’ WHERE A = 'AA01’
制約違反。この操作により、(A, B) = ('AA02’, 'BB01’) の行が重複し、UNIQUE 制約に違反します。
【答え】
エ: UPDATE R SET A = 'AA02’ WHERE A = 'AA01’
出典:平成22年度 春期 データベーススペシャリスト試験 午前II 問3