MySQL 检查约束(CHECK)

举报
CoderX 发表于 2022/04/20 16:05:08 2022/04/20
【摘要】 检查约束(CHECK) 检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。 (默认值和非空约束也可以看做特殊的检查约束)MySQL只是可以使用check约束,但不会强制的遵循check约束! 官方推荐使用枚举类型(ENUM)来替代以上的使用...

检查约束(CHECK)

检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。 (默认值和非空约束也可以看做特殊的检查约束)

MySQL只是可以使用check约束,但不会强制的遵循check约束! 官方推荐使用枚举类型(ENUM)来替代以上的使用check约束的情况

选取设置检查约束的字段

检查约束使用 CHECK 关键字,具体的语法格式如下:

 CHECK <表达式>

其中,“表达式”指的就是 SQL 表达式,用于指定需要检查的限定条件。

若将 CHECK 约束子句置于表中某个列的定义之后,则这种约束也称为基于列的 CHECK 约束。

在更新表数据的时候,系统会检查更新后的数据行是否满足 CHECK 约束中的限定条件。MySQL 可以使用简单的表达式来实现 CHECK 约束,也允许使用复杂的表达式作为限定条件,例如在限定条件中加入子查询。

注意:若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的 CHECK 约束。该约束可以同时对表中多个列设置限定条件。

1.在创建表时设置检查约束

创建表时设置检查约束的语法格式如下:

 CHECK(<检查约束>)

示例1:创建tb_emp3数据表, 要求 salary 字段值大于 0 且小于 10000,SQL 语句和运行结果如下所示。

 mysql> CREATE TABLE tb_emp3(
     -> id INT(11) PRIMARY KEY,
     -> name VARCHAR(25),
     -> deptId INT(11),
     -> salary FLOAT,
     -> CHECK (salary>0 AND salary<100),
     -> FOREIGN KEY(deptId) REFERENCES tb_dept(id)
     -> );
 Query OK, 0 rows affected (0.01 sec)

2.在修改表时设置检查约束

修改表时设置检查约束的语法格式如下:

 ALTER TABLE <数据表名> ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)

示例2:修改tb_emp3数据表, 要求 id 字段值大于 0,SQL 语句和运行结果如下所示。

 mysql> ALTER TABLE tb_emp3 ADD CONSTRAINT check_id CHECK(id>0);
 Query OK, 0 rows affected (0.00 sec)
 Records: 0  Duplicates: 0  Warnings: 0

3.删除检查约束

修改表时删除检查约束的语法格式如下:

 ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;

示例3:删除tb_emp3表中的check_id检查约束 ,SQL 语句和运行结果如下所示:

 mysql> ALTER TABLE tb_emp3 DROP CONSTRAINT check_id;
 Query OK, 0 rows affected (0.19 sec)
 Records: 0  Duplicates: 0  Warnings: 0
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。