MySQL 速習チュートリアル

MySQL UNIQUE 制約

1. MySQL UNIQUE 制約の概要

UNIQUE 制約は、特定のカラムに含まれるすべての値が一意(ユニーク)であることを保証します。

UNIQUE 制約と PRIMARY KEY(主キー)制約は、どちらもカラムまたはカラムの集合に対して一意性を保証するものです。しかし、決定的な違いがあります。UNIQUE 制約は1つのテーブルにつき複数定義できますが、PRIMARY KEY 制約は1つのテーブルにつき1つしか定義できません。

2. CREATE TABLE 時の UNIQUE 設定

テーブルを作成する際に、"ID" カラムに対して UNIQUE 制約を定義するには、以下の SQL 構文を使用します。

実行例

/* Persons テーブルを作成し、ID カラムに一意性を強制する */
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    UNIQUE (ID)
);

2.1 UNIQUE 制約への命名と複数カラムへの適用

制約に特定の名前を付けたり、複数のカラムを組み合わせて UNIQUE 制約を定義(複合一意制約)したりする場合は、以下の構文を使用します。

実行例

/* 制約名を "UC_Person" とし、ID と LastName の組み合わせを一意にする */
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID, LastName)
);

3. ALTER TABLE 時の UNIQUE 設定

すでに作成済みのテーブルの "ID" カラムに対して UNIQUE 制約を追加するには、以下の SQL 構文を使用します。

実行例

/* 既存の Persons テーブルに UNIQUE 制約を追加 */
ALTER TABLE Persons
ADD UNIQUE (ID);

3.1 制約名と複数カラムの設定 (ALTER TABLE)

既存のテーブルに対して、制約名を指定しつつ複数カラムに制約を追加する場合は、以下の構文となります。

実行例

/* 既存テーブルに対し、ID と LastName のペアを一意にする制約を追加 */
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID, LastName);

4. UNIQUE 制約の削除

定義した UNIQUE 制約を削除するには、以下の SQL を使用します。

実行例

/* インデックス名(制約名)を指定して UNIQUE 制約を削除 */
ALTER TABLE Persons
DROP INDEX UC_Person;