SQL进阶2

发布时间:2024年01月17日

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 <constraint name>--约束的命名
check (<condition>)--被约束的条件

其中:

? ? ? ? 约束关键字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
文章来源:https://blog.csdn.net/C_nroll/article/details/135553931
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。