平成22年 春期 データベーススペシャリスト 午前II 問3

表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

 ア  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'


答え エ


解説
それぞれの操作を行った後の表を求めてみる。

 ア  DELETE FROM R WHERE A = 'AA01' AND B = 'BB02'
A B C D
AA01 BB01 CC01 DD01
AA02 BB01 NULL DD03
AA02 BB03 NULL NULL
2行目のレコードが削除されますが、ユニーク制約は保たれています。
 イ  INSERT INTO R VALUES ( 'AA01', NULL, 'DD01', 'EE01' )
A B C D
AA01 BB01 CC01 DD01
AA01 BB02 CC02 NULL
AA02 BB01 NULL DD03
AA02 BB03 NULL NULL
AA01 NULL DD01 EE01
最後のレコードが追加されますが、ユニーク制約は保たれています。
 ウ  INSERT INTO R VALUES ( NULL, NULL, 'AA01', 'BB02' )
A B C D
AA01 BB01 CC01 DD01
AA01 BB02 CC02 NULL
AA02 BB01 NULL DD03
AA02 BB03 NULL NULL
NULL NULL AA01 BB02
最後のレコードが追加されますが、ユニーク制約は保たれています。
 エ  UPDATE R SET A = 'AA02' WHERE A = 'AA01'
A B C D
AA02 BB01 CC01 DD01
AA02 BB02 CC02 NULL
AA02 BB01 NULL DD03
AA02 BB03 NULL NULL
1行目と2行目もレコードの“AA01”が“AA02”に変更され、1行目と3行目のレコードが区別を付けることができなくなり、ユニーク制約に違反します。


キーワード
・UNIQUE制約

キーワードの解説
  • UNIQUE制約(一意性制約)
    データベースの表において、データの組(行)で見たときに表中に同じデータがなく、ユニーク(一意)にデータを特定できるような制約を、データの追加、更新時に課する制約です。
    なお、主キーがある表では、主キーの値はユニーク制約になっています。

もっと、「UNIQUE制約」について調べてみよう。

戻る 一覧へ 次へ