SQL进阶2

5、检查CHECK约束


        CHECK 约束主要用于通过将插入的值限制为遵循定义的值、范围或格式规则的值来强制域完整性。

5.1 CHECK 约束(检查性约束)用来限制字段的取值范围。

        在 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约束来将其设定为正整数。

5.2 创建表(create table)时添加check约束

在创建课程表courses时,给学生总数student_count字段加上一个大于0的约束。
create table courses
(
    id int,
    check (student_count >0),--大于0的约束
    name varchar(50),
    student_count int,
    teacher_id int
);
为多个列添加check约束
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 关键字连接。

为CHECK约束命名 
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:是被约束的条件

 5.3 表已创建好,往表中添加check约束的操作

课程表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关键字:表示增加

5.4 撤销CHECK约束 

        撤销CHECK约束,需要使用到DROP关键字。

alter table courses
drop constraint chk_courses;

6、DEFAULT约束

         DEFAULT约束又叫“ 默认约束”,全称叫 “默认值约束 ”。

6.1 default 用法

        default约束用于往列中插入默认值。

        如果创建的表中的字段设定了默认值,在使用插入语句的没有对该字段进行赋值,那么默认值就会添加到相应的字段上。

6.2 CREATE TABLE时的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进行相应的赋值
);
6.3 ALTER TABLE 时的DEFAULT约束

如果表已被创建时,想要在City列创建DEFAULT约束

alter table Persons
add constraint ab_c default 'sandnes' for'City'---为City字段的增加默认值sandnes
6.4 撤销DEFAULT约束
        语法:
alter table Persons
alter column 'City' drop default

你可能感兴趣的:(数据库系统概念进阶,sql,数据库)