SQL UNIQUE制約
UNIQUE制約は、SQL において 1 つ以上の列のすべての値が一意であることを保証するために使用されます。つまり、制約が適用される列には重複する値を含めることはできません。
UNIQUE主キー (PRIMARY KEY) 制約に似ていますが、UNIQUE制約では列の値を NULL にすることができますが、NULL、主キーでは許可されません。
PRIMARY KEY 制約には、一意性(UNIQUE)制約の機能が組み込まれています。
各テーブルには複数の UNIQUE 制約を設定できますが、PRIMARY KEY 制約は 1 つだけ定義できます。
使用シーン
- 一意性の確保:例えば、メールアドレスやユーザー名などのフィールドがテーブル全体で一意であることを保証します。
- 複数の列に適用:複数の列に
UNIQUE制約を作成して、組み合わせ値の一意性を確保できます。
CREATE TABLE 時の SQL UNIQUE 制約
テーブル作成時に、特定の列または複数の列に UNIQUE 制約を定義して、これらの列の値がテーブル内で一意であることを保証できます。
"Persons" テーブルのP_Id列に追加するUNIQUE制約
MySQL:
CREATE TABLE Persons (
P_Id INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
UNIQUE (P_Id)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
P_Id INT NOT NULL UNIQUE,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);
UNIQUE制約を複数の列に定義する
UNIQUE 制約に名前を指定し、複数の列に適用する場合は、次の構文を使用できます:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
P_Id INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id, LastName)
);
ALTER TABLE 時に UNIQUE 制約を追加する
テーブルがすでに存在する場合は、ALTER TABLE ステートメントを使用して、指定した列に UNIQUE 制約を追加できます。
"P_Id" 列に追加するUNIQUE制約
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD UNIQUE (P_Id);
命名UNIQUE制約を複数の列に適用する
UNIQUE 制約に名前を付け、複数列の UNIQUE 制約を定義する場合は、次の SQL 構文を使用してください:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id, LastName);
UNIQUE 制約の削除
UNIQUE 制約を削除する必要がある場合は、次の SQL ステートメントを使用できます:
MySQL:
ALTER TABLE Persons DROP INDEX uc_PersonID;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID;その他の拡張