定义约束

1.CHECK约束
用于限制输入一列或多列的值的范围。

CHECK约束的创建,查看与删除
语法格式:
[CONSTRAINT CHECK constraint_name]
CHECK (logical_expression)

例15: 为teacher表创建CHECK约束,使字段”性别“只能为”男“或”女“
use book
ALTER TABLE teacher
ADD
CONSTRAINT CK_teacher CHECK(性别='男' or 性别='女')

删除CHECK约束语句格式:
DROP CONSTRAINT CHECK constraint_name

删除上面的约束语句如下:
ALTER TABLE teacher
DROP CONSTRAINT CH_teacher

2.DEFAULT约束
设定该列的默认值,即当没有指定数据时,系统把该值赋予该列。


DEFAULT约束的创建,查看和删除

创建约束语法格式:
[CONSTRAINT DEFAULT constraint_name]
DEFAULT constraint_expression

例16 创建性别default约束为“男”,当用户插入新数据行,该字段没有指定数据时,系统将自动赋予该字段“男”
ALTER TABLE teacher
ADD CONSTRAINT 性别 DEFAULT '男' FOR 性别

删除约束语法格式:
DROP CONSTRAINT DEFAULT constraint_name

删除‘例16'所定义的DEFAULT约束
ALTER TABLE teacher
DROP CONSTRAINT DE_性别

3.PRIMARY KEY约束
在表中用一列或多列的组合去唯一标识表中的每一行。这样的一列或多列成为表的主键(Primary key),通过它可以强制表的实体完整性。一个表只能有一个主键,且主键约束中的列不能为空值。

例17 把teacher表中的"作者编号"作为“主键”
ALTER TABLE teacher
ADD CONSTRAINT PK_作者编号 PRIMARY KEY CLUSTERED(作者编号)

删除该主键
ALTER TABLE teacher
DROP CONSTRAINT PK_作者编号

4.FOREIGN KEY约束
外键(Foreign Key):用于建立和加强两个表(主表与从表)的一列或多列数据之音的连接,当添加、修改或删除数据时,通过参照完整性来保证它们之间的数据的一致性。

例18 为BOOK1表中的编号列建立键约束
ALTER TABLE book1
ADD CONSTRAINT pk_编号 PRIMARY KEY CLUSTERED(编号)

为bookin表中的编号列建立外键约束
ALTER TABLE booking
ADD CONSTRAINT FK_编号 FOREIGN KDY(编号)
REFERENCES book1(编号)


5.UNIQUE约束
UNIQUE约束用于确保表中的两个数据行在非主键中没有相同的列值。

表--修改--索引/键


注:表中所有约束的名称必须是唯一的,不能相同。



默认与规则

1.使用默认
功能与DEFAULT相同,但与DEFAULT约束不同,默认值是一种数据库对象,在数据库中只需定义一次,就可以被一次或多次地应用在任意表中的一列或多列上,还可以应用在用户自定义的数据类型上。

创建默认的命令如下:
CREATE DEFAULT default_name
AS constraint_expression

其中:
default_name:表示新建立的默认的名称。
constraint_expession:指定默认常量表达式的值。

例19 创建默认“MR_定价”
use book
go
create default mr_定价
as '100'
go

创建默认后,就可以将其绑定到表中的某列上,以后在向该表输入数据时,定价列的默认值为100

将默认绑定到表中某列上的命令语句如下:
EXEC sp_bindefault default_name
'table_name,[column_name[...]|user_datetype]'


将MR_定价 绑定到 book1.定价  上
EXEC sp_bindefault MR_定价,'book1,定价'


2.使用规则
概念上,规则与CHECK约束的关系相对于默认与DEFAULT约束的关系一样。即“规则”的作用与CHECK一样,但"规则“不固定哪列。

语法格句:
CREATE RULE rule_name
AS condition_expression

其中:
rule_name:新建的规则名。
condition_expression:定义规则的条件。

例20
USE book
go
create rule gz_定价
as @定价>=0 and @定价<=10000
go

注意这里的“@定价"是个变量,现在还不知它代表数据表中的哪个列,只有待该规则绑定到表中的一个具体列上,它才代表那个具体列的列值。


执行绑定规则的命令语句格式:
EXEC sp_bindrule rule_name,'table_name,[column_name[,...]|user_datetype]'


将它绑定到book2表中的“定价”列上,此时,变量“@定价'代表定价的列值。

EXEC sp_bindrule GZ_定价,'book2.定价'

==============例===============
--主键约束
alter table userinfo
add constraint pk_id primary key (id)
--唯一约束
alter table userinfo
add constraint uq_username unique (username)
--默认约束
alter table userinfo
add constraint df_address default ('地址不详') for address
--检查约束
alter table userinfo
add constraint ck_email check(email like '%@%')
--外键约束
alter table username
add constraint fk_id
foreign key(id) references userinfo(id)

2 删除约束
语法:alter table 表名
         Drop constraint 约束名