20 SQL Check
1. 定义
慕课解释:
Check
约束用于限制字段值的范围;Check
既可以定义在单个字段上,也可以在定义在表上对特定字段进行约束。
2. 前言
本小节,我们将一起学习SQL Check
。
前面的小节中,我们谈到了诸多数据类型和约束;如果说数据类型是对数据的第一层约束,那么Check
便是数据的第二层约束,Check 可以在数据库层面上筛选掉不符合约束的数据。
3. 创建时约束
Check 可以直接在创建数据表时给字段加上约束。
3.1 例1 字段上约束
请书写 SQL 语句,新建imooc_user
表,共有 id,username,age 三个字段,且为 age 字段添加上 Check 约束,规定所有 age 必须大于0
。
分析:
使用 Create 指令新建数据表,并通过 Check 给 age 加上>0
的约束。
语句:
整理可得语句如下:
CREATE TABLE imooc_user
(
id int PRIMARY KEY,
username varchar(20),
age int CHECK(age > 0)
);
创建成功后,若插入的数据不满足条件,插入会失败,如下:
insert into imooc_user values(2,'pedro',0);
(3819, "Check constraint 'imooc_user_chk_1' is violated.")
3.2 例2 数据表上约束
Check 不仅可以作用在字段上,还可以直接在数据表上。
请书写 SQL 语句,新建imooc_user
表,共有 id,username,age 三个字段,且为 age 字段添加上 Check 约束,规定所有 age 必须大于0
且小于1000
。
分析:
同例1。
语句:
整理可得语句如下:
CREATE TABLE imooc_user
(
id int PRIMARY KEY,
username varchar(20),
age int,
CHECK(age > 0 AND age < 1000)
);
4. Alter 时更改约束
数据表还可以在修改时添加Check
约束或者删除约束。
4.1 例3 Alter 添加约束
请书写SQL语句,为imooc_user
表的 username 字段添加上 Check 约束,规定 username 只能为peter
。
分析:
使用 Alter 指令修改 imooc_user 表,并为 username 字段添加上约束。
语句:
整理可得语句如下:
ALTER TABLE imooc_user ADD CONSTRAINT username_constraint CHECK(username='peter');
4.2 例4 Alter 删除约束
请书写 SQL 语句,删除imooc_user
表的 username 字段约束。
分析:
使用 Alter 指令修改 imooc_user 表,删除掉 username 字段上的约束。
语句:
(MySQL下)整理可得语句如下:
ALTER TABLE imooc_user DROP CHECK username_constraint;
如果是 PostgreSQL 会有些许不同,语句如下:
ALTER TABLE imooc_user DROP CONSTRAINT username_constraint;
5. 小结
- Check 虽然可以约束字段,但是会影响数据插入和更新的速度,降低数据库性能,因此一般都不推荐使用 Check。