1. 空值約束(NULL或NOT NULL)
空值約束決定屬性值是否運行為空值(NULL)。NULL表示沒有輸入任何內容,它不是零和空白。不允許為空值用NOT NULL表示。
eg:新建學生表,設置姓名不允許為空,性別允許為空。
CREATE TABLE stu ( name CHAR(10) NOT NULL, sex CHAR(2) NULL )
2. 主鍵約束(PRIMARY KEY CONSTRAINT)
主鍵約束要求主鍵屬性取值必須唯一,一個表只能包含一個主鍵約束。如果沒有在主健約束中指定CLUSTERED或NONCLUSTERED,並且沒有為UNIQUE約束指定聚集索引,則將對該主健約束用CLUSTERED。
語法:[CONSTRAINT 約束名] PRIMARY KEY [CLUSTERED | NONCLUSTERED] (列名 [,...n])
eg1:新建學生表,將id設置為主鍵
CREATE TABLE stu ( id CHAR(12) NOT NULL, name CHAR(10) NOT NULL, sex CHAR(2) NULL, CONSTRAINT pk_stu PRIMARY KEY CLUSTERED (id) )
eg2:新建學生表,將id和name設置為聯合主鍵
CREATE TABLE stu ( id CHAR(12) NOT NULL, name CHAR(10) NOT NULL, sex CHAR(2) NULL, CONSTRAINT pk_stu PRIMARY KEY CLUSTERED (id,name) )
3. 唯一性約束(UNIQUE CONSTRAINT)
唯一性約束用於指定一個或者多個列的組合的值具有唯一性,以防止在列中輸入重復的值。使用唯一性約束時,需考慮一下因素:
- 使用唯一性約束的字段允許為空值
- 一個表中可以允許有多個唯一性約束
- 可以把唯一性約束定義在多個字段上
- 唯一性約束用於強制在指定字段上創建一個唯一性索引
- 在默認情況下,創建的索引類型為非聚簇索引
語法:[CONSTRAINT 約束名] UNIQUE [CLUSTERED | NONCLUSTERED] (列名 [,...n])
eg:創建學生表,設置id和phone唯一
CREATE TABLE stu ( id CHAR(12) NOT NULL, name CHAR(10) NOT NULL, phone CHAR(11) NULL, CONSTRAINT uniq_stu UNIQUE (id, phone) )
4. 檢查約束(CHECK CONSTRAINT)
使用檢查約束時,應該注意:
- 一個列級檢查約束只能與限制的字段有關,一個表級檢查約束只能與限制的表中字段有關
- 一個表可以定義多個檢查約束
- 每個CREATE TABLE語句中每個字段只能定義一個檢查約束
- 在多個字段上定義檢查約束,則必須將檢查約束定義為表級約束
- 檢查約束中不能包含子查詢
語法:CONSTRAINT CONSTRAINT_name
CHECK [NOT FOR REPLICATION] (logical_expression)
eg:新建學生表,設置id只接受首位非0的四位數,性別字段只能設為F或M
CREATE TABLE stu ( id int NOT NULL, name VARCHAR(10) NOT NULL, sex CHAR(1) NULL, CONSTRAINT chk_id CHECK (id LIKE '[1-9][0-9][0-9][0-9]'), CONSTRAINT chk_sex CHECK (sex IN ('F','M')) )
5. 默認約束(DEFAULT CONSTRAINT)
使用默認約束時,應該注意:
- 每個字段只能定義一個默認約束
- 如果定義的默認值長於其字段的最大長度,該默認值輸入到表中將被截斷
- 不能加入到帶有IDENTITY屬性或數據類型為timestamp的字段上
- 如果字段定義為用戶定義的數據類型,並且該數據類型綁定到這個字段上,則不允該字段由默認約束
6. 外部鍵約束(FOREIGN KEY CONSTRAINT)
外部鍵約束用於強制參照完整性,提供單個字段或者多個字段的參照完整性。當使用外部鍵約束時,應該考慮以下幾個因素:
- 外部鍵約束提供字段參照完整性
- 外部鍵從句中的字段數目和每個字段指定的數據類型必須和REFERENCES從句中的字段相匹配
- 外部鍵約束不能自動創建索引,需要用戶手動創建
- 一個表中最多可以用31個外部鍵約束
- 在臨時表中,不能使用外部鍵約束
- 主鍵和外部鍵的數據類型必須嚴格匹配
- 如果需要級聯修改和刪除,要使用ON UPDATE CASCADE ON DELETE CASCADE
語法:[CONSTRAINT 約束名] FOREIGN KEY (外鍵列名) REFERENCES 參照表 (參照列名) [ON UPDATE CASCADE ON DELETE CASCADE]
外鍵約束主要用來維護兩個表之間的一致性關系。
外鍵的建立主要是通過將一個表的主鍵所在列包含在另一個表中,這些列就是另一個表的外鍵。
eg:新建學生表和成績表,設置stu_id為學生表的主鍵,成績表的外鍵並參照學生表的stu_id
CREATE TABLE stu ( stu_id CHAR(12) NOT NULL, name CHAR(10) NOT NULL, sex CHAR(2) NULL, CONSTRAINT pk_stu PRIMARY KEY CLUSTERED (stu_id) ) CREATE TABLE grade ( stu_id CHAR(12) NOT NULL, course_id CHAR(10) NOT NULL, score INT, CONSTRAINT fk_stu_id FOREIGN KEY (stu_id) REFERENCES stu(stu_id) )