SQL UNIQUE 制約
SQLの UNIQUE 制約は、カラム内のすべての値が重複していない(ユニークである)ことを保証するために使用します。
UNIQUE 制約と PRIMARY KEY 制約は、どちらもカラムまたはカラムの集合に対して一意性を保証するものです。ただし、1つのテーブルに対して PRIMARY KEY は1つしか設定できませんが、UNIQUE 制約は1つのテーブル内に複数定義することが可能です。
1. CREATE TABLE における UNIQUE 制約
テーブル作成時に「ID」カラムに対して UNIQUE 制約を定義する SQL は以下の通りです。
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL UNIQUE, -- IDカラムにNULLを許容せず、一意制約を付与
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
UNIQUE (ID) -- テーブル定義の末尾でIDカラムに一意制約を指定
);2. UNIQUE 制約への命名と複数カラムへの定義
UNIQUE 制約に任意の名前を付けたり、複数のカラムを組み合わせた一意性を定義したりする場合は、以下の構文を使用します。
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
-- UC_Person という名前で、ID と LastName の組み合わせに一意制約を付与
CONSTRAINT UC_Person UNIQUE (ID, LastName)
);3. ALTER TABLE における UNIQUE 制約
テーブルが既に作成されている状態で、特定のカラム(例:「ID」カラム)に UNIQUE 制約を追加する場合は、以下の SQL 構文を使用します。
ALTER TABLE Persons
ADD UNIQUE (ID);4. ALTER TABLE での命名と複数カラム制約の追加
既存のテーブルに対して制約名を指定し、かつ複数カラムに対して UNIQUE 制約を定義する場合は、以下の構文になります。
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID, LastName);5. UNIQUE 制約の削除
設定された UNIQUE 制約を削除するには、以下の SQL を実行します。
MySQL:
ALTER TABLE Persons
DROP INDEX UC_Person; -- MySQLではDROP INDEXを使用SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT UC_Person; -- 標準的なDROP CONSTRAINTを使用