前言

在MySQL 8.0版本中,引入了一个非常有用的新特性 ― 检查性约束,它可以提高对非法或不合理数据写入的控制能力;接下来我们就来详细了解一下。

检查性约束

创建、删除与查看

(1)可以在建表时,创建检查性约束

mysql> CREATE TABLE t1

-> (

-> CHECK (c1 <> c2),

-> c1 INT CHECK (c1 > 10),

-> c2 INT CONSTRAINT c2_positive CHECK (c2 > 0),

-> c3 INT CHECK (c3 < 100),

-> CONSTRAINT c1_nonzero CHECK (c1 <> 0),

-> CHECK (c1 > c3)

-> );

Query OK, 0 rows affected (0.03 sec)

(2)也可以通过下列语句,新增检查性约束

mysql> ALTER TABLE t1 ADD CONSTRAINT c3_nonzero CHECK ((c3<>0));

Query OK, 0 rows affected (0.16 sec)

Records: 0 Duplicates: 0 Warnings: 0

(3)可以通过下列语句,删除检查性约束

mysql> ALTER TABLE t1 DROP CONSTRAINT c3_nonzero;

Query OK, 0 rows affected (0.02 sec)

Records: 0 Duplicates: 0 Warnings: 0

(4)可以通过查询表结构的方式,查看检查性约束

mysql> SHOW CREATE TABLE t1G

*************************** 1. row ***************************

Table: t1

Create Table: CREATE TABLE `t1` (

`c1` int DEFAULT NULL,

`c2` int DEFAULT NULL,

`c3` int DEFAULT NULL,

CONSTRAINT `c1_nonzero` CHECK ((`c1` <> 0)),

CONSTRAINT `c2_positive` CHECK ((`c2` > 0)),

CONSTRAINT `t1_chk_1` CHECK ((`c1` <> `c2`)),

CONSTRAINT `t1_chk_2` CHECK ((`c1` > 10)),

CONSTRAINT `t1_chk_3` CHECK ((`c3` < 100)),

CONSTRAINT `t1_chk_4` CHECK ((`c1` > `c3`))

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

(5)也可以通过下面两个视图查看,其中table_constraints查询表存在哪些约束,check_constraints查询检查性约束的具体定义

mysql> SELECT * FROM information_schema.table_constraints WHERE table_name="t1";

+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+

| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE | ENFORCED |

+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+

| def | test | c1_nonzero | test | t1 | CHECK | YES |

| def | test | c2_positive | test | t1 | CHECK | YES |

| def | test | t1_chk_1 | test | t1 | CHECK | YES |

| def | test | t1_chk_2 | test | t1 | CHECK | YES |

| def | test | t1_chk_3 | test | t1 | CHECK | YES |

| def | test | t1_chk_4 | test | t1 | CHECK | YES |

+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+

6 rows in set (0.00 sec)

mysql> SELECT * FROM information_schema.check_constraints WHERE constraint_name="c1_nonzero";

+--------------------+-------------------+-----------------+--------------+

| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | CHECK_CLAUSE |

+--------------------+-------------------+-----------------+--------------+

| def | test | c1_nonzero | (`c1` <> 0) |

+--------------------+-------------------+-----------------+--------------+

1 row in set (0.00 sec)

(6)当插入不符合检查性约束的数据时,会直接报错

mysql> insert into t1 values(0,0,0);

ERROR 3819 (HY000): Check constraint "c1_nonzero" is violated.

限制

(1)自增列和其他表的列,不支持检查性约束

(2)不确定的函数,如CONNECTION_ID(),CURRENT_USER(),NOW()等,不支持检查性约束

(3)用户自定义函数,不支持检查性约束

(4)存储过程,不支持检查性约束

(5)变量,不支持检查性约束

(6)子查询,不支持检查性约束

总结

检查性约束,还是一个非常不错的功能,可以实现丰富的数据校验场景,大家可以尝试一下。

以上就是MySQL 8.0新特性 ― 检查性约束的简单介绍的详细内容,更多关于MySQL 8.0新特性 ― 检查性约束的资料请关注云海天教程其它相关文章!

mysql3819错误,MySQL 8.0新特性 ― 检查性约束的使用简介相关推荐

  1. MySQL 8.0新特性--CTE Recurive(二)

    上一篇介绍了CTE的基本用法,参考MySQL 8.0新特性--CTE(一),本篇再来介绍一下CTE Recurive递归. 1.什么是CTE Recurive? A recursive common ...

  2. mysql8.0创建属性,MySQL 8.0新特性 — 管理端口的使用简介

    前言 下面这个报错,相信大多数童鞋都遇见过:那么碰到这个问题,我们应该怎么办呢?在MySQL 5.7及之前版本,出现"too many connection"报错,超级用户root ...

  3. MySql 8.0新特性:窗口函数

    MySQL8.0新特性:窗口函数 1.1 使用窗口函数前后对比 假设我现在有这样一个数据表,它显示了某购物网站在每个城市每个区的销售额: CREATE TABLE sales( id INT PRIM ...

  4. MySQL 8.0 新特性之检查约束(CHECK)

    文章目录 MySQL 8.0.15 之前 MySQL 8.0.16 之后 列级检查约束 表级检查约束 强制选项 检查约束限制 总结 大家好,我是只谈技术不剪发的 Tony 老师.这次我们来介绍一个 M ...

  5. mysql+8.0+新特性_MySQL 8.0备受瞩目的新特性大放送!

    原标题:MySQL 8.0备受瞩目的新特性大放送! 作者介绍 杨奇龙,目前就职于有赞科技,负责数据库运维工作,熟悉MySQL性能优化.故障诊断.性能压测. MySQL于 2016-09-12正式发布8 ...

  6. MySQL 5.0 新特性教程 触发器:第一讲

    滥觞:网海拾贝 作者:mysql AB;翻译:陈朋奕 Conventions and Styles约定和编程作风 每次我想要演示实践代码时,我会对mysql客户真个屏幕就出现的代码阻止调解排解,将字体 ...

  7. mysql8.0 的新特性_What's New In MySQL 8.0(MySQL 8.0 新特性)

    由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gcc耗时较 ...

  8. sql server的密码采用自带什么密码技术存储_【技术分享】浅谈MYSQL 8.0新特性

    于树文 云技术管理处 01 MySQL 8.0中添加的功能 1. 新的系统字典表 整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储. 2. 支持DDL 原子操作 I ...

  9. mysql 6.0 新特性 2014_MySQL 各版本的特性

    Mysql5.5 特性,相对于Mysql5.1 性能提升 默认存储引擎更改为 InnoDB引擎.具有提交.回滚和宕机恢复功能 和ACID兼容. 行级锁. 表与索引存储在表空间中, 表大小无限制. 支持 ...

最新文章

  1. docker 启动petalinux镜像脚本
  2. 新一轮的心情整理(有二年没来这里了)
  3. 解决ajax方法内部不能给外部变量赋值的问题
  4. php用array_merge实现无限级分类
  5. 徐州初中计算机学校排名2015,徐州初中学校排名,徐州重点初中排名详细榜单
  6. linux虚拟机备份树莓派,为树莓派做系统备份镜像(for Linux #038; Mac),
  7. 【HTML+CSS网页设计与布局 从入门到精通】第2章
  8. linux使用iscsi磁盘的几个步骤
  9. 此次边路调整系统推荐射手走哪路_王者荣耀:射手调整前瞻,阿离回归边路!新英雄/皮肤下周上架...
  10. 计算机应软件与理论学什么,计算机软件与理论
  11. java初级程序员必备的算法和数据结构入门只是,编程界的敲门砖,算法合集,简单详细
  12. nexus3 测试操作
  13. linux识别riser卡,一种应用在GPU服务器中可灵活配置的Riser卡的制作方法
  14. 校园学生疫情防范监控小程序 毕业设计-附源码281444
  15. php粒子背景特效_12个精致炫酷的背景装饰特效库(分享)
  16. 百度文字识别官方Demo
  17. 一文搞懂 STL 中 deque 与 hashtab 的底层实现
  18. word操作:如何修改字体(正确、规范、快捷)
  19. nightwatch 使用Expect进行浏览器元素校验 (三)
  20. 南大软工考研参考书目

热门文章

  1. sublime 常用的一些快捷键
  2. 2008r2文件服务器迁移,Win2008 R2文件迁移实战之准备迁移
  3. 【cocos2dx-3.0beta-制作flappybird】让马里奥大叔来搬水管—在游戏层加入水管
  4. qt 下 原生socket tcp 基本用法
  5. 红领巾心向党PPT模板
  6. 【工具】---cachecloud使用
  7. 程序员必备技能之约会倍增术
  8. shader中的法线变换
  9. 看MapleSim符号如何一步解决并联机构逆运动学问题
  10. 3dmax 视图切换