UNIQUE 約束的核心功能是確保資料表中每一筆記錄的唯一性。它保證特定欄位或欄位組合的值不會重複,讓每一列資料都能被精確識別。雖然 PRIMARY KEY 也具備唯一性,但兩者有關鍵差異:一張資料表只能擁有一個 PRIMARY KEY,卻可以建立多個 UNIQUE 約束。此外,PRIMARY KEY 隱含了 NOT NULL 與 UNIQUE 兩項特性,而 UNIQUE 約束允許欄位包含 NULL 值(視資料庫實作而定)。
不同資料庫系統的語法略有差異,以下示範在建立 Persons 表時,對 P_Id 欄位套用 UNIQUE 約束:
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) );
CREATE TABLE Persons ( P_Id int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) );
為了方便後續管理,建議為約束命名,並可針對多欄位組合定義唯一性。以下語法適用於主流資料庫:
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) );
這裡的 uc_PersonID 是自訂約束名稱,(P_Id, LastName) 表示這兩個欄位的組合必須唯一。
若資料表已存在,可透過 ALTER TABLE 追加約束:
ALTER TABLE Persons ADD UNIQUE (P_Id);
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id, LastName);
移除語法因資料庫而異,請依實際環境選擇:
ALTER TABLE Persons DROP INDEX uc_PersonID;
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID;
uk_ 或 uc_),利於維護。