定义约束
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 约束名
转载于:https://blog.51cto.com/390503/282368