sql sever 約束

SQLServer中有五種約束,Primary Key約束、Foreign Key約束、Unique約束、Default約束和Check約束

1、Primary Key約束
在表中常有一列或多列的組合,其值能唯一標識表中的每一行。
這樣的一列或多列成為表的主鍵(PrimaryKey)。一個表只能有一個主鍵,而且主鍵約束中的列不能為空值。只有主鍵列才能被作為其他表的外鍵所創建。

--刪除主鍵
 alter table 表名 drop constraint 主鍵名
 --添加主鍵
 alter table 表名 add constraint 主鍵名 primary key(欄位名1,欄位名2……)

2、Foreign Key約束
外鍵約束是用來加強兩個表(主表和從表)的一列或多列數據之間的連接的。創建外鍵約束的順序是先定義主表的主鍵,然後定義從表的外鍵。也就是說只有主表的主鍵才能被從表用來作為外鍵使用,被約束的從表中的列可以不是主鍵,主表限制了從表更新和插入的操作。

alter table  外鍵表名  add constraint 約束名稱 foreign key(外鍵欄位)  references 主鍵表名(約束列名)

3、Unique約束
唯一約束確保表中的一列數據沒有相同的值。與主鍵約束類似,唯一約束也強制唯一性,但唯一約束用於非主鍵的一列或者多列的組合,且一個表可以定義多個唯一約束。

create unique index u_index on table(id,name,sex)
 
ALTER TABLE [dbo].[T_Question] ADD UNIQUE NONCLUSTERED 
(
[IdentityFlag],[FK_CatalogID] ASC
)

4、Default約束
若在表中定義了默認值約束,用戶在插入新的數據行時,如果該行沒有指定數據,那麼系統將默認值賦給該列,如果我們不設置默認值,系統默認為NULL。

--給指定列添加默認約束
alter table 表名 add constraint 約束名 default(約束值) for 列名;

5、Check約束
Check約束通過邏輯表達式來判斷數據的有效性,用來限制輸入一列或多列的值的範圍。在列中更新數據時,所要輸入的內容必須滿足Check約束的條件,否則將無法正確輸入。
語法

ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE];

6、 刪除約束:

   --判斷默認約束是否存在,如果存在則先刪除,如果不存在則直接添加
if exists(select * from sysobjects where name=約束名)
alter table 表名 drop constraint 約束名;