六,SQL Server完整性約束條件


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)
)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM