SQL SERVER 2005中的约束
2010-10-01 09:00:36 来源:WEB开发网我们对Product表中的ProductCode列设置了unique约束,这一列的值不可重复.但允许有空值存在.
insert into product (productname,ProductCode) values('aaa',null)
OK
第一个空值插入成功
insert into product (productname,ProductCode) values('bbb',null)
ERROR:Violation of UNIQUE KEY constraint 'pc_unique'. Cannot insert duplicate key in object 'dbo.product'.
第二个空值插入失败
4.
Primary Key Constraints
主键约束可能是大家最为熟悉的,在数据库的设计中,我们基本上会对每一张表建一个主键约束,用以把数据库的每条记录(行)区分开来.主键可以针对表中的一列或多列。但与约束不同的是,它的值不能为空。
下面的例子是对其中一列设置主键:
Create Table Users(
UserID int primary key,
UserName varchar(50) not null
)
下面是对多列设置主键:
CREATE TABLE KeyData
(
FiscalYear int not null,
Period int not null,
DataType int not null,
KeyValue int not null
CONSTRAINT [PK_constraint_keydata] PRIMARY KEY CLUSTERED
(
FiscalYear,
Period
)
)
5.
Foreign Key Constraints
前面提到约束分语义上限制和属性关系的限制,外键约束就是用来限制属性间关系的。通俗一点讲,就是一张表中的某列引用了另一张表的主键,因为该列的值必须出自主键列的值。
Create table Manager
(
ManagerID int primary key,
ManagerName varchar(50),
)
上面我们建立了一个Manager的表,有一个ID列是该表的主键,唯一代表了每一个经理。
下面建立了销售区域的表,并指定每个区域有一个经理负责:
Create Table SalesRegion
(
SalesRegionID int Primary Key,
SalesRegionName varchar(100),
ManagerID int foreign key REFERENCES Manager(ManagerID)
)
从上面的命令中可以看出,ManagerID就是外键,它的作用是连接了SalesRegion与Manager两张表,限制ManagerID在表SalesRegion中的使用,我们不能把某个区域指定给一个不存在经理负责。如果我们试图往SalesRegion插入一条记录,而该记录的ManagerID是Manager表中不存在的ManagerID,系统就会报出以下的错误:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK__SalesRegi__Manag__3F6663D5". The conflict occurred in database "AdventureWorks", table "dbo.Manager", column 'ManagerID'.
更多精彩
赞助商链接