UNIQUE 約束確保欄位或欄位組合的值在表中**不重複**,允許 NULL (單欄位時多個 NULL 被視為不同值)。本文系統整理建立、修改、刪除、複合唯一鍵與實戰操作。
CREATE TABLE table_name ( col1 data_type, col2 data_type, ... [CONSTRAINT constraint_name] UNIQUE (col1, col2, ...) );
-- 指定欄位 (單欄位唯一鍵) ALTER TABLE table_name DROP UNIQUE (column_name); -- 指定約束名稱 (通用,複合鍵必須用此法) ALTER TABLE table_name DROP CONSTRAINT constraint_name;
CREATE TABLE p2 ( pid NUMBER(4), pname VARCHAR2(20), psex CHAR(2), CONSTRAINT p2_unique UNIQUE (pid, pname) -- 複合鍵:pid+pname 組合唯一 ); -- 測試 INSERT INTO p2 VALUES (1, 'Alice', 'F'); -- 成功 INSERT INTO p2 VALUES (1, 'Bob', 'M'); -- 成功 (pid 相同但 pname 不同) INSERT INTO p2 VALUES (2, 'Alice', 'F'); -- 成功 (pname 相同但 pid 不同) INSERT INTO p2 VALUES (1, 'Alice', 'M'); -- 失敗 (pid+pname 完全相同)
特性 UNIQUE PRIMARY KEY 允許 NULL 是 (單欄位多個 NULL 視為不同) 否 (隱含 NOT NULL) 每表數量 多個 僅一個 預設索引 非叢集 (Non-unique Index) 叢集/唯一索引 外鍵參考 可被參考 標準參考目標 語義含義 業務唯一性 (Email、身分證) 實體識別鍵 查詢現有唯一約束