約束是宣告式資料完整性核心。SQL Server 提供五種:1) 主鍵約束 (PRIMARY KEY):唯一識別列,每表一個,不可 NULL,CLUSTERED|NONCLUSTERED 選擇索引類型,最多 16 欄位;2) 外鍵約束 (FOREIGN KEY):定義表間關聯,參考主鍵/唯一鍵,支援 ON UPDATE/DELETE CASCADE/SET NULL/NO ACTION,最多 16 欄位;3) 唯一約束 (UNIQUE):確保欄位組合唯一,允許單一 NULL,底層建立唯一索引;4) 檢查約束 (CHECK):布林運算式限制欄位值域;5) 預設約束 (DEFAULT):插入時未指定欄位自動填入預設值。本文提供完整 CONSTRAINT 語法、命名慣例、複合鍵定義、ON DELETE CASCADE 級聯刪除範例、Enterprise Manager 圖形化建立步驟。
| 約束 | 核心語法 | 關鍵特性 |
|---|---|---|
| PRIMARY KEY | CONSTRAINT pk_name PRIMARY KEY [CLUSTERED|NONCLUSTERED] (col1, col2...) | 唯一+非空,每表一個,預設叢集 |
| FOREIGN KEY | CONSTRAINT fk_name FOREIGN KEY (col1...) REFERENCES ref_table (ref_col1...) [ON UPDATE|DELETE CASCADE|SET NULL|NO ACTION] | 參考完整性,級聯動作 |
| UNIQUE | CONSTRAINT uq_name UNIQUE [CLUSTERED|NONCLUSTERED] (col1...) | 唯一,允許單一 NULL |
| CHECK | CONSTRAINT ck_name CHECK (logical_expression) | 值域限制,可跨欄位 |
| DEFAULT | CONSTRAINT df_name DEFAULT constant_expression FOR column | 插入時自動填入 |
CREATE TABLE products (
p_id char(8) NOT NULL,
p_name char(10) NOT NULL,
price money DEFAULT 0.01,
quantity smallint NULL,
CONSTRAINT pk_p_id PRIMARY KEY (p_id, p_name)
) ON [PRIMARY];
ALTER TABLE OrderDetails ADD CONSTRAINT fk_od_order
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
ON DELETE CASCADE; -- 刪除訂單自動刪除明細

PK_TableName, FK_ChildTable_ParentTable, UQ_TableName_Columns, CK_TableName_Rule, DF_TableName_Column。