CHECK 约束主要用于通过将插入的值限制为遵循定义的值、范围或格式规则的值来强制域完整性。
在 CHECK 约束中添加限制条件,只有满足这些条件的值才允许进入该字段。
CHECK 约束用于限制列中的值的范围,评估过插入或修改后的值。满足条件的值将会插入表中,否则将放弃插入操作。 可以为同一列指定多个 CHECK 约束。
CHECK
约束既可以用于某一列也可以用于某张表:如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
定义CHECK约束类似于编写查询的WHERE的子句,使用不同的比较运算符(例如AND、OR、BETWEEN、IN、LIKE以及IS NULL)来编写符合条件的布尔表达式,根据判断的结果,布尔表达式将返回true、false或者是unknown。条件中有NULL的值时,CHECK约束将返回unknown。
创建一个简单的课程表courses,表中的每一条数据记录着课程编号id、课程名称name、学生总数student_count以及授课老师编号teacher_id。其中课程编号id为主键。
根据基本的常识,学生总数肯定是正整数,这时候就要用到CHECK约束来将其设定为正整数。
create table courses
(
id int,
check (student_count >0),--大于0的约束
name varchar(50),
student_count int,
teacher_id int
);
create table course
(
id int,
name varchar(50),
student_count int,
teacher_id int,
check(student_count>0 and teacher_id >0)--student_count 到 teacher_id之间的字段约束
);
如果想为一个表中多个字段添加约束,直接在 CHECK 关键字后的括号内添加,两个约束间使用 AND 关键字连接。
create table courses
(
id int,
name varchar(50),
student_count int,
teacher_id int,
constraint chk_courses check(student_count >0)
);
constraint --约束的命名
check ()--被约束的条件
其中:
约束关键字constraint:表示它后面接的是约束的内容
constraint name:是约束名
关键字CHECK:表示检查约束check
condition:是被约束的条件
课程表courses已存在的情况下为学生总数student_count字段添加一个大于0的check约束。
alter table courses
add check (student_count >0);--添加约束的内容
或者
alter table courses
add constraint chk_courses check (student_count >0 and teacher_id >0);
ALTER TABLE关键字:表示修改表的定义
ADD关键字:表示增加
撤销CHECK约束,需要使用到DROP关键字。
alter table courses
drop constraint chk_courses;
DEFAULT约束又叫“ 默认约束”,全称叫 “默认值约束 ”。
default约束用于往列中插入默认值。
如果创建的表中的字段设定了默认值,在使用插入语句的没有对该字段进行赋值,那么默认值就会添加到相应的字段上。
使用DEFAULT关键字设置默认值约束
在Persons表创建时在City列上创建DEFAULT约束
create table Persons
(
P_Id int not null,
LastName varchar(50) not null,
FirstName varchar(50),
Address varchar(50),
City varchar(50) default 'Sandnes'--设定默认值为Sandnes
);
使用getdate()函数,default约束可以用于插入系统值:
create table Orders
(
O_Id int not null,
OrderNo int not null,
P_Id int,
OrderDate date default getdate()--getdate()函数会根据系统给出相应的数值,对OrderDate进行相应的赋值
);
如果表已被创建时,想要在City列创建DEFAULT约束
alter table Persons
add constraint ab_c default 'sandnes' for'City'---为City字段的增加默认值sandnes
alter table Persons
alter column 'City' drop default