你知道吗?约束分为列级约束和表级约束。
如果我们了解了这件事情,那么当我们用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]