平成22年度 春期 データベーススペシャリスト試験 午前Ⅱ 問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 (注:本サイトでは原問題の表を文字表記に変換しています)
出典:平成22年度 春期 データベーススペシャリスト試験 午前Ⅱ 問3
- ア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'
正解:エ
解説
(A,B)の2列でのUNIQUE制約は,AとBの値の組合せが表全体で重複しないことを要求します。既存の行には(AA01,BB01)と(AA01,BB02)があるため,UPDATE文でA列をすべて'AA02'に変更すると,2行目の(A,B)が(AA02,BB02)となり,既存の(AA02,BB01)や(AA02,BB03)とは重複しませんが,1行目も(AA02,BB01)に変わり,既存の3行目の(AA02,BB01)と重複してしまい,UNIQUE制約に違反します。
選択肢ごとの解説
- ア誤り。DELETE文は既存の行を削除するだけであり,(A,B)の組合せの一意性を損なうことはないため,UNIQUE制約には違反しません。
- イ誤り。INSERT文で追加される(A,B)は('AA01',NULL)であり,NULLを含む場合は一意性比較の対象とならない(既存の('AA01','BB01')や('AA01','BB02')とは異なる組として扱われる)ため,UNIQUE制約には違反しません。
- ウ誤り。INSERT文で追加される(A,B)は(NULL,NULL)であり,NULLを含むため一意性比較の対象とならず,UNIQUE制約には違反しません。
- エ正しい。UPDATE文によってA列がすべて'AA02'に変更されると,1行目の(A,B)が既存の3行目と同じ('AA02','BB01')になってしまい,(A,B)の一意性が失われるため,UNIQUE制約に違反します。