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


  1. 說明
    1. Primary Key
    2. Unique
    3. Default
    4. Check
  2. 特殊應用
    1. Uniqueidentifier (GUID)
    2. 暫時關閉條件約束 No Constraint
  3. 參考資料

筆記如何設計資料表的條件約束 (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