SQL 速習チュートリアル

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 を指定して削除可能