SQL Server 資料表的條件約束,維護資料的正確性 (Table Constraint)

2021-02-23

筆記如何設計資料表的條件約束 (Constraint) 讓資料表中的內容保持正確與一致。

SQL Server Logo

說明

Primary Key

示範 SQL Server 如何建立主鍵(Primary Key),並藉由設定識別規格來自動賦值與遞增值,而當欄位被設定為識別規格後,就無法指定值,必須由系統自動賦予,除非將資料表的 IDENTITY_INSERT 屬性啟用。

如果要設定複合主鍵,可以利用 Ctrl 來複選並建立。

Unique

示範 SQL Server 如何建立唯一值(Unique),保持特定欄位的數值不在不同列重複,應用情境如非作為主鍵的電子郵件欄位,可以藉由唯一值確保電子郵件不重複。

💡 Unique 與 Primary Key(PK) 的差別? Unique 欄位可以存入 NULL;PK 則不行;此外資料表可以有多個 Unique 條件約束,但資料表僅能有一個 PK。

Default

示範 SQL Server 如何建立欄位預設值(Default),處理未輸入數值或者不需要輸入數值的情境,例如給與自動系統日期、時間。特別的日 timestamp 資料類型的欄位無法設定 default,因為其已經預設定 default 為系統的日期時間。

Check

示範 SQL Server 如何建立運算式檢查條件(Check),不僅前端、後端做資料的檢查,資料庫端也可以輔助進行檢查。另使用的情境包括,資料欄位的最大值可以經由資料型別設定,但最小值則可以利用檢查條件來設定。

特殊應用

Uniqueidentifier (GUID)

混合應用 Unique 與 Default 的應用,如果有全世界唯一值的需求,可以使用資料型別 uniqueidentifier ,並且將 RowGuid 啟用,系統會強制設定 default 為 (newid()),需要注意的是一張資料表僅能有一個 RowGuid 欄位

暫時關閉條件約束 No Constraint

Foreign Key 以及 Check 可以藉由 Alter Table 的方式暫時關閉 Constraint。

ALTER TABLE TBNAME NOCHECK CONSTRAINT_NAME -- 關閉 CONSTRAINT_NAME 條件約束
ALTER TABLE TBNAME CHECK CONSTRAINT_NAME   -- 啟用 CONSTRAINT_NAME 條件約束

ALTER TABLE TBNAME NOCHECK ALL -- 關閉資料表中所有的條件約束(Foreign Key, Check)

參考資料

ALTER TABLE table_constraint