- Home ›
- PostgreSQLの使い方 ›
- テーブルの作成 ›
- HERE
PRIMARY KEY制約
カラムに含まれる値が完全に重複しないようする制約です。「UNIQUE」+「NOT NULL」と同じですがテーブルの中で行を特定できるカラムという意味で使います。また同じテーブル内では「PRIMARY KEY」制約は1つしか設定できません。
構文としては下記のようになります。
create table table_name (column_name1 column_type PRIMARY KEY, …);
カラムを指定する際に、"PRIMARY KEY"を指定します。
では試してみます。
「sample4」というテーブルを作成し、「name」と「address」という2つのカラムを作成します。そして「name」カラムには「PRIMARY KEY」制約を指定しておきました。UNIQUEを設定した場合と同様にインデックスを作成した云々というメッセージが出ます。
ではまず1行追加してみます。
次に「PRIMARY KEY」が設定している「name」カラムに先ほどと同じ値を指定して行を追加してみます。
「name」カラムは「PRIMARY KEY」制約を指定しているのに同じ値を追加しようとしたため、「ERROR: duplicate key violates unique constraint "sample4_pkey"」というエラーが発生しました。
また、「PRIMARY KEY」制約があるカラムには「NULL」も含めることが出来ません。
「name」カラムは「PRIMARY KEY」制約を指定しているのに値を省略した結果でNULLが格納されようとしたため、「ERROR: null value in column "name" violates not-null constraint」というエラーが発生しました。
別の記述方法
先ほどは「PRIMARY KEY」を設定したいカラムに対して直接「PRIMARY KEY」を指定しましたが、下記のように記述する事も出来ます。
create table table_name (column_name1 column_type, … , PRIMARY KEY(column_name1, …) );
カラムに直接指定する場合と同じですが、複数のカラムを組み合わせて「PRIMARY KEY」を設定する場合はこちらの記述方法を使います。複数のカラムを組み合わせるというのは、単独のカラムに「PRIMARY KEY」を設定した場合は、そのカラムに含まれる値に重複が認められませんでしたが、複数のカラムを組み合わせて「PRIMARY KEY」を設定すると、その複数のカラムの値の組み合わせが重複できないようになります。
例えば2つのカラムを組み合わせた場合で考えて見ます。それぞれのカラムの値が「A」と「B」という行がある時に「A」と「C」という行は追加することは出来ますが「A」と「B」という既にある組み合わせの行は追加することは出来ません。
では試してみます。
「sample5」というテーブルを作成し、「name」と「address」という2つのカラムを作成します。そして「name」と「address」の2つのカラムの組み合わせに対して「PRIMARY KEY」制約を指定しておきました。
では行を追加してみます。カラム単位では同じ値が既に別の行にあっても問題はありませんが、2つのカラムの値の組み合わせが既にある行が存在するとエラーとなります。
( Written by Tatsuo Ikura )