UNIQUE制約

広告

カラムに格納する値として既に格納されているデータの値と重複した値を禁止したい場合、カラムにUNIQUE制約を設定します。ここではUNIQUE制約の使い方について解説します。

1.UNIQUE成約の使い方
2.複数のカラムを対象としたUNIQUE成約

UNIQUE成約をカラムに設定する場合、書式は次の通りです。

CREATE TABLE テーブル名(カラム名 UNIQUE, ...);

UNIQUE成約が設定されたカラムには他のデータで格納されている値と同じ値は格納することができなくなります。

では実際に試してみます。次のようなテーブルを作成しました。「id」カラムにはUNIQUE成約が設定されています。

create table user(id integer unique, name text);

p11-1

まずいくつかのデータを追加してみます。

p11-2

次に「id」カラムの値として既に格納済のデータと同じ値を設定したデータを追加してみます。すると「id」カラムにはUNIQUE制約が設定されているため「Error: UNIQUE constraint failed: user.id」というエラーが表示されます。

p11-3

このようにUNIQUE制約をカラムに設定することで、重複の無い値しかカラムに格納できなくなります。

なおUNIQUE制約が設定されていてもNULLだけは重複して格納することが可能です。

p11-4

カラムにNULLを格納することを許可したくない場合は「NOT NULL制約」を合わせて設定されて下さい。

先ほどは単独のカラムに対してUNIQUE制約を設定する方法を試しましたが、複数のカラムを対象としたUNIQUE制約を設定することも可能です。次の書式を使用します。

CREATE TABLE テーブル名(カラム名1, カラム名2, ... ,
  UNIQUE(カラム名1, カラム名2, ...));

例えば2つのカラムを対象にUNIQUE制約を設定すると、それぞれのカラムの値は重複しても構いませんが2つのカラムの値の組み合わせと同じ組み合わせの値を格納しようとするとエラーとなります。

では実際に試してみます。次のようなテーブルを作成しました。「staffno」カラムと「unit」カラムのペアに対してUNIQUE成約が設定されています。

create table staff(staffno integer, unit text, name text, unique(staffno, unit));

p11-5

まずいくつかのデータを追加してみます。

p11-6

次に「unit」カラムの値として既に格納済のデータと同じ値を設定したデータを追加してみます。この場合もエラーにはなりません。

p11-7

次に「staffno」カラムと「unit」カラムの値として既に格納済のデータと同じペアの値を設定したデータを追加してみます。するとUNIQUE制約が設定されているため「Error: UNIQUE constraint failed: staff.staffno, staff.unit」というエラーが表示されます。

p11-8

このように単独のカラムに対してだけではなく、複数のカラムの組み合わせに対してもUNIQUE制約を設定することが可能です。

( Written by Tatsuo Ikura )