1. 程式人生 > >關於SQL Server資料表的五種約束

關於SQL Server資料表的五種約束

1、主鍵約束(PRIMARY KEY)

主鍵約束可以在表中定義一個主鍵值,它可以唯一確定表中每一條記錄,每個表中只能有一個主鍵約束(只能有一個主鍵約束的意思並不是說受主鍵約束的列只能有一個),並且受主鍵約束的列不能為空值。如果主鍵約束定義在不止一列上,則某一列中的值可以存在重複,但是受主鍵約束的所有列的組合值必須唯一。

2、唯一性約束(UNIQE)

唯一性約束確保在非主鍵列中不輸入重複的值。用於指定一個或多個列的組合具有唯一性,以防止在列中輸入重複的值。可以在一個表中定義多個唯一性約束,但是隻能定義一個主鍵約束。唯一性約束允許空值,但是當和參與唯一性約束的任何值一起使用時,每列只允許一個空值。

3、檢查約束

檢查約束對於輸入列或者整個表中的值設定檢查條件,可以限制輸入值,以保證資料庫之間的完整性。檢查約束通過資料的邏輯表示式來確定有效值。例如:定義一個age年齡欄位,可以通過建立CHECK約束條件,將age欄位裡面的值的範圍限定在0到150之間(age >=0 AND age<=150)。

  • 每個欄位只能設定一個檢查約束。
  • 檢查約束中不能包含子查詢。
  • 一個列級檢查約束只能與限制的欄位有關,一個表級檢查約束只能與限制的表中的欄位有關。

4、預設約束

預設約束指定在插入操作中如果沒有提供輸入值時,系統會自動制定插入值,即使該值是NULL。當必須向表中載入一行資料但是不知道某一列的值,或者是該值尚不存在時,此時可以使用預設值約束。

5、外來鍵約束

如果表A的主關鍵字是表B中的欄位,則該欄位稱為表B的外來鍵,表A稱為主表,表B稱為從表。外來鍵是用來實現參照完整性的。
比如說:
create table t_group (   
    id int not null,   
    name varchar(30),   
    primary key (id)   
);  
insert into t_group values (1, 'Group1');   
insert into t_group values (2, 'Group2');
create table t_user (   
    id int not null,   
    name varchar(30),   
    groupid int,   
    primary key (id),   
    foreign key (groupid) references t_group(id) on delete cascade on update cascade  
);  
insert into t_user values (1, 'qianxin', 1); --可以插入   
insert into t_user values (2, 'yiyu', 2);    --可以插入   
insert into t_user values (3, 'dai', 3);    --錯誤,無法插入,使用者組3不存在,與參照完整性約束不符 
insert into t_user values (1, 'qianxin', 1);   
insert into t_user values (2, 'yiyu', 2);   
insert into t_user values (3, 'dai', 2);   
delete from t_group where id=2;              --導致t_user中的2、3記錄級聯刪除   
update t_group set id=2 where id=1;          --導致t_user中的1記錄的groupid級聯修改為2