資料庫 SQL語言中 列級約束和表級約束
你知道嗎?約束分為列級約束和表級約束。
如果我們瞭解了這件事情,那麼當我們用T—SQL語句建立約束時,思路就會更加清晰。瞭解了這件事,相信我們會對約束有更進一步的理解。
大家都知道,在SQL Server 2000中有5種約束:
主鍵約束(primary key )
唯一性約束(unique)
檢查約束(check)
預設約束(default)
外部鍵約束(foreign)
由上圖可知,1,主鍵、外來鍵、唯一、檢查這四項,既可以建立列約束,也可以建立表約束。而預設 和 非空只能建立列約束。
2,列級約束與表級約束的區別:
(1)列級約束:只能應用於一列上。
表級約束:可以應用於一列上,也可以應用在一個表中的多個列上。
(即:如果你建立的約束涉及到該表的多個屬性列,則必須建立的是表級約束(必須定義在表級上);否則既可以定義在列級上也可以定義在表級上此時只是SQL語句格式不同而已)
(2)列級約束:包含在列定義中,直接跟在該列的其它定義之後 ,用空格分隔;不必指定列名
表級約束:
(注:因為在建立列級約束時,只需將建立列約束的語句新增到該欄位(列)的定義子句後面;而在建立表級約束時,需要將建立表級約束的語句新增到各個欄位(列)定義語句的後面,因為並不是每個定義的欄位都要建立約束,所以必須指明需要建立的約束的列名。)
舉例說明:Create Table project
(
專案編號 int
Constraint pk_pno primary key,
專案名稱 char(20),
專案負責人 char(20),
Constraint un_pname_pm unique(專案名稱,專案負責人)
)
分析:“專案編號”欄位設定為主鍵,主鍵約束名為pk_pno,此主鍵約束為列主鍵約束“專案名稱”和“專案負責人”的組合欄位設定唯一性約束,此約束為表級約束)
各約束在建立列約束和表約束時的具體說明:
一:既可以建立列級約束又可以建立表級約束的:
1,主鍵約束(primary key constraint):
(1)定義列約束:Constraint <約束名> Primary Key
(2)定義表約束:[Constraint <約束名>] Primary Key( <列名> [{<列名>}])
2,唯一性約束(unique key constraint):
(1)定義列約束:[Constrain <約束名>] Unique
(2)定義表約束:Constrain <約束名> Unique ( <列名> [{<列名>}])
3,檢查約束(check constraint):
既可以用於列約束,也可以用於表約束: [Constraint <約束名>] Check (<條件>)
(注意:一個列級檢查約束只能與限制的欄位有關;一個 表級約束只能與限制的表中的欄位有關)
4外來鍵約束(foreign key constrain:
定義 列級約束:[Constraint <約束名>] Foreign key References <外表名>
定義表級約束:[Constraint <約束名>] Foreign key References <外表名>( <列名> [{<列名>}])
二:只能建立列級約束的:
1,預設約束(default constraint):
[Constraint <約束名>] Default 約束條件
2,Null 約束:
[Constraint <約束名>] [Null | Not Null]