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

問3

R表に,(A,B)の2列で一意にする制約(UNIQUE制約)が定義されているとき,R表に対するSQL文でこの制約に違反するものはどれか。ここで,R表には主キーの定義がなく,また,全ての列は値が決まっていない場合(NULL)もあるものとする。
03.png/image-size:281×118
  • 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制約(一意性制約)は、データベースにデータを追加したり更新する際に、列や列のグループの値が表内のすべての行で一意となるように要求する制約です。なおUNIQUE制約は、NULL値を許容するという点で主キー制約と異なります。

この問題では(A,B)の2列の組合せが表内で一意となっていることが要求されています。それぞれのSQL文を実行した結果を考えてみましょう。
  • Aが'AA01' かつ Bが'BB02'の行、つまり一番上の行を削除するSQL文です。
    03_a.png/image-size:299×90
    結果にはUNIQUE制約に違反する行はありません。
  • 表に('AA01',NULL,'DD01','EE01')の行を挿入するSQL文です。
    03_i.png/image-size:299×133
    結果にはUNIQUE制約に違反する行はありません。
  • 表に(NULL, NULL,'AA01','BB02')の行を挿入するSQL文です。
    03_u.png/image-size:299×133
    結果にはUNIQUE制約に違反する行はありません。
  • Aが'AA01'のレコードである行について、Aの値を'AA02'に更新するSQL文です。
    03_e.png/image-size:299×112
    この更新が行われると、Aが'AA02'、Bが'BB01'の行が1、3行目の重複して現れます。よって、この操作はUNIQUE制約に違反します。
© 2016- データベーススペシャリストドットコム All Rights Reserved.

Pagetop