SQL PRIMARY KEY 制約
PRIMARY KEY(主キー)制約は、データベーステーブル内の各レコードを一意に識別するためのものです。
PRIMARY KEY 制約は、値がユニーク(一意)であることを保証し、かつ NULL 値を含めることはできません(つまり、UNIQUE 制約と NOT NULL 制約を組み合わせた性質を持ちます)。
1つのテーブルに設定できる PRIMARY KEY 制約は 1つだけ です。主キーは単一のカラムで構成することも、複数のカラムを組み合わせることも可能です。
Tips: 主キーは、他のテーブルにおける FOREIGN KEY(外部キー)制約の参照先となります。これにより、2つのテーブル間のデータにおける参照整合性(Referential Integrity)が保たれます。
1. CREATE TABLE における PRIMARY KEY 制約
テーブル作成時に「ID」カラムを PRIMARY KEY として定義する SQL は以下の通りです。
CREATE TABLE Persons (
ID int PRIMARY KEY, -- IDカラムを主キーとして定義
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);2. 複数カラムへの PRIMARY KEY 設定
名前を付けずに、複数のカラムを組み合わせて PRIMARY KEY 制約を定義(複合キー)する場合の構文は以下の通りです。
CREATE TABLE Persons (
ID int,
LastName varchar(255),
FirstName varchar(255),
Age int,
PRIMARY KEY (ID, LastName) -- ID と LastName の組み合わせを主キーに設定
);注記: 上記の例では、主キーの値は2つのカラム(ID + LastName)の組み合わせによって構成されます。
制約に特定の名前を付けつつ、複数カラムに PRIMARY KEY を定義する場合は、以下の構文を使用します。
CREATE TABLE Persons (
ID int,
LastName varchar(255),
FirstName varchar(255),
Age int,
-- PK_Person という名前で複合主キーを定義
CONSTRAINT PK_Person PRIMARY KEY (ID, LastName)
);注記: 上記の例では、主キーに「PK_Person」という名前が付けられ、ID と LastName の組み合わせが一意性の識別子となります。
3. ALTER TABLE による PRIMARY KEY の追加
既に作成済みのテーブルの「ID」カラムに対して PRIMARY KEY 制約を追加する場合は、以下の SQL を使用します。
ALTER TABLE Persons
ADD PRIMARY KEY (ID);4. ALTER TABLE での命名と複数カラム主キーの定義
既存のテーブルに対して制約名を指定し、複数カラムに PRIMARY KEY を追加する構文は以下の通りです。
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);注記: ALTER TABLE を使用して主キーを追加する場合、対象となるカラムはテーブル作成時にあらかじめ NOT NULL(NULLを許容しない)として宣言されている必要があります。
5. PRIMARY KEY 制約の削除
設定された PRIMARY KEY 制約を削除するには、使用している RDBMS に応じて以下の SQL を実行します。
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT PK_Person; -- 制約名を指定して削除MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY; -- MySQLでは直接 PRIMARY KEY を指定して削除可能