check约束的介绍

说白了,CHECK约束就是数据库中的一条规则,用来保证数据的一致性和准确性。
其实这很简单,就和数据库中的某列加一把锁,只允许某些数据通过一样。
我们先来说说最重要的事情。
例如,如果您的作者表有邮政编码列,您可以设置 CHECK 约束以仅接受 6 位邮政编码,以避免错误的数据输入。

另一点是 CHECK 约束可以作用于多个列。
例如,您可能希望确保特定日期列中的数据不早于当前日期。
这也可以通过 CHECK 约束来实现。
还有另一个重要的细节。
CHECK 约束是在创建表时定义的。
当删除表时,关联的 CHECK 约束就会消失。

一开始我以为CHECK约束只能限制数据类型,后来发现我错了。
您还可以基于复杂逻辑限制数据,例如使用函数或子查询。
还有一件事需要注意。
CHECK 约束不会阻止插入违反约束的数据;它只是返回一条错误消息。

因此,在使用CHECK约束时,我认为需要注意两点:确保约束的逻辑正确,合理使用,避免过度限制导致数据录入不便。

mysql中check的用法

嘿,你的描述太正式了,像教科书一样,看完我想睡觉... 😴
上周当一个客户问我使用 MySQL CHECK 约束的意义是什么时,我告诉他以下内容:
想象一下你有一个存储员工信息的表。
你不希望自己的工资为负数吧?或者写你的年龄2 00岁?这就是 CHECK 限制派上用场的地方。

创建方法其实很简单。
我通常使用 ALTER TABLE 来添加它。
例如: sql ALTER TABLE 员工添加约束 chk_age CHECK(年龄 1 8 至 6 5 ); 你看,我这里把年龄限制在1 8 岁到6 5 岁之间。
如果有人想插入1 7 岁或者6 5 岁以上的人,数据库会直接杀掉你,不让你改回来。

在2 02 3 年我负责的一个项目中,由于忘记添加CHECK薪资 > 0约束,导致一名实习生不小心将某薪资输入为-5 000。
最后发现整个报告都是错误的,我们差点被解雇...🥶
优点真的很多。
最明显的就是数据完整性,这比自己写逻辑判断要可靠得多。
我有一个朋友以前使用PHP进行手动验证。
结果他写了一个bug,公司所有员工的工资都变成了负数——你没看错,是整个公司! 😱
此外,代码的可读性确实有了明显的提升。
当其他人查看您的表单定义时,他们会立即知道哪些字段是必填的以及哪些字段有限制。
与糟糕的代码不同,所有注释都会被删除,你猜怎么着?当客户来问问题的时候,我们要翻很长时间的源码。

但要小心:CHECK 限制仅对插入或更新生效。
如果您使用SQL语句手动更改数据(例如使用UPDATE将年龄更改为2 00),它不会自动更改!因为这个坑,上次我花了半个小时把数据一次改回来。

另外,不要写太复杂的条件表达式。
我见过有人这样写: sql CHECK(性别(“男”,“女”)或者性别为零) 这并没有什么问题,但是如果你必须写一个嵌套的CASE语句,数据库可能会挂掉——我在2 02 2 年在上海的一个购物中心测试过,服务器震动了3 次。

总之,使用CHECK约束是有用的,但不要盲目这样做。
例如,某些条件可能更适合使用触发器或控制应用程序级逻辑。
我还在思考的问题是:如果数据量特别大,这些限制会不会减慢查询速度? ——一般来说就看你自己了,我还没查过。

MySQL中check的用法

那天,在调试报表数据时,发现插入了一部分不符合CHECK约束的数据,但整条记录并没有报错。
我当时很困惑。
查看手册后发现,MySQL 8 .0.1 6 之后,可以选择不应用CHECK约束。
例如,我在这里创建了两个表。
f1 的约束是强制的,r1 必须是3 的倍数;未施加 f2 约束,但插入 1 实际上会通过。
这就像交通规则。
有的路口安装了摄像头拍照,有的路口只是为了提醒,但不管怎样,闯红灯肯定会被罚款。
等等,还有一点,就是约束名称不能重复,系统会自动生成,就像每个人的身份证号都不一样一样。
但请记住,像现在这样实时变化的函数,或者存储过程中的逻辑,不能在 CHECK 中使用。
我突然想到,如果我们能够动态适应这个约束,比如业务需求发生变化,我们想暂时放宽限制,那该多方便啊。