約束是 SQL Server 自動維護資料完整性的機制,限制可輸入表或單一欄位的資料。五種約束:主鍵、外鍵、唯一、檢查、預設。
指定一或多欄值唯一識別每列。每表僅一個主鍵,IMAGE/TEXT 型別不可為主鍵,不允許 NULL。語法:CONSTRAINT constraint_name PRIMARY KEY [CLUSTERED|NONCLUSTERED] (column_name1[,...])。範例:以產品編號與名稱為複合主鍵。
定義表間關聯,參考其他表主鍵。支援 ON DELETE/UPDATE CASCADE|NO ACTION、NOT FOR REPLICATION。語法:CONSTRAINT constraint_name FOREIGN KEY (col1[,...]) REFERENCES ref_table (ref_col1[,...]) [ON DELETE {CASCADE|NO ACTION}] [ON UPDATE {CASCADE|NO ACTION}] [NOT FOR REPLICATION]。範例:訂單表關聯產品表。臨時表不可指定外鍵。
確保一或多欄值唯一,允許 NULL。主鍵欄不可再設唯一約束。最多 16 欄。語法:CONSTRAINT constraint_name UNIQUE [CLUSTERED|NONCLUSTERED] (col1[,...])。範例:員工身分證字號唯一。
限制輸入值符合邏輯條件。語法:CONSTRAINT constraint_name CHECK [NOT FOR REPLICATION] (logical_expression)。範例:訂購數量不得小於 10。計算欄僅支援檢查約束。
指定欄位預設值。語法:CONSTRAINT constraint_name DEFAULT constant_expression [FOR column_name]。範例:constraint de_order_quantity default 100 for order_quantity。僅能在建表後 ADD,不可建表時定義。
欄位約束屬於欄位定義一部分,僅作用於該欄;表約束屬於表定義一部分,可作用多欄。範例展示兩者差異。