操作步驟 (表設計師)
- 物件總管:展開資料庫 → 資料表
- 右鍵目標表 → 設計
- 點選需設為唯一的欄位列 (可按 Ctrl 多選)
- 右鍵選取欄位 → 索引/鍵...
- 在「索引/鍵」對話框:點選 加入
- 右側屬性格:類型 → 選擇「唯一鍵」
- 關閉對話框 → 儲存表 (Ctrl+S)
T-SQL 等效指令
-- 新增唯一非叢集索引 (預設)
ALTER TABLE dbo.MyTable ADD CONSTRAINT UQ_MyTable_Col1 UNIQUE NONCLUSTERED (Col1);
-- 新增唯一叢集索引 (表只能有一個叢集索引)
ALTER TABLE dbo.MyTable ADD CONSTRAINT UQ_MyTable_Col1 UNIQUE CLUSTERED (Col1);
-- 多欄位唯一鍵
ALTER TABLE dbo.MyTable ADD CONSTRAINT UQ_MyTable_Col1_Col2 UNIQUE (Col1, Col2);
-- 允許 NULL 但保持唯一 (Filtered Index, SQL 2008+)
CREATE UNIQUE NONCLUSTERED INDEX UQ_MyTable_Col1_NotNull
ON dbo.MyTable (Col1) WHERE Col1 IS NOT NULL;
唯一鍵 vs 主鍵 vs 唯一索引
| 特性 | 主鍵 (PK) | 唯一鍵 (UK) | 唯一索引 |
| 每張表數量 | 1 | 多個 | 多個 |
| 允許 NULL | 否 | 是 (單一 NULL) | 是 (單一 NULL) |
| 預設索引類型 | CLUSTERED | NONCLUSTERED | NONCLUSTERED |
| 外來鍵參考 | 可 | 可 | 不可直接參考 |
| 語義含義 | 實體識別 | 業務唯一性 | 效能/唯一性 |
注意事項
- 大表新增唯一鍵需掃描全表檢查重複,會長時間鎖表
- 企業版可用
ONLINE = ON 減少封鎖
- 已有重複資料會導致建立失敗,需先清理
- Filtered Unique Index 可解決「可 NULL 但非 NULL 唯一」需求