星期四, 5月 28, 2026

[SQL] Unique 條件約束

以往要在 Table 上建立 Unique 條件約束,都是以建立 Unqiue Index 來達成,在 Line 社群上看見討論提到,建立 Unique 條件約束,也會自動建立一個 Unique Index 出來,基本上從 Index 或是 Constraint 來建立,底層都會是 Unique Index

建立 Unique Constraint 語法
ALTER TABLE TableName   
ADD CONSTRAINT AK_TableName_ColName UNIQUE (ColName);   
GO  
建立 Unique Index 語法
CREATE UNIQUE INDEX UQ_TableName_ColName
ON dbo.TableName (ColName)
GO  
完整範例
USE AdventureWorks2025;  
GO

DROP TABLE IF EXISTS tblUniqueDemo
GO

CREATE TABLE tblUniqueDemo
 (  
    ID int NOT NULL CONSTRAINT PK_tblUniqueDemo PRIMARY KEY,
    Email VARCHAR(100),
    Phone VARCHAR(20)
);   
GO

-- 建立 Unique Constraint 語法
ALTER TABLE tblUniqueDemo
ADD CONSTRAINT AK_tblUniqueDemo_Email UNIQUE (Email);   
GO  

-- 建立 Unique Index 語法
CREATE UNIQUE INDEX UQ_tblUniqueDemo_Phone
ON dbo.tblUniqueDemo (Phone)
GO  

-- 透過 sys.Indexes 查詢
SELECT 
    [name] ,
    [type] ,
    [type_desc] ,
    is_primary_key ,
    is_unique ,
    is_unique_constraint
FROM sys.indexes 
WHERE object_id = object_id('tblUniqueDemo')
sys.indexes 內有兩個 Unique 相關欄位資訊,分別為
  • is_unique:Index is unique.
  • is_unique_constraint:Index is part of a UNIQUE constraint.,白話翻譯就是是否從 Constraint 語法建立出來的
SSMS 內觀察,兩種建立方式,Unique Index 圖示也會不同

沒有留言:

張貼留言