You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL设置REGEXP正则的CHECK约束后违规INSERT仍可插入是什么原因

MySQL CHECK约束未生效问题原因分析

核心原因可分为两类:

  • 原因1:MySQL版本低于8.0.16,CHECK约束无实际校验作用
    MySQL在8.0.16版本发布之前,仅支持CHECK约束的语法解析,执行约束创建语句不会报错,但内核不会对后续的插入、更新操作做规则校验,约束定义仅作为表元数据存储,不会实际生效。如果使用的是该版本之前的MySQL,要实现字段值校验只能通过触发器逻辑实现,或升级MySQL到8.0.16及以上版本。
  • 原因2:正则表达式规则不符合严格校验需求
    你当前使用的正则[0-9]{10}的匹配逻辑是只要字符串中包含连续10位数字即可通过校验,而非要求整个字符串恰好为10位数字。你插入的12位数字058669493211中显然包含连续10位数字,所以即使约束生效,该条数据也会通过校验。
    如果要严格要求PhoneNum字段必须为10位纯数字,正则需要添加首尾匹配标识,正确写法如下:
alter table people add constraint people_chk_1 check (PhoneNum REGEXP '^[0-9]{10}$' );

补充说明:如果你的MySQL版本在8.0.16及以上,仍出现约束不生效的情况,可以执行show variables like 'check_constraint_checks';确认参数是否为ON,该参数为OFF时会全局禁用所有CHECK约束的校验逻辑。

内容的提问来源于stack exchange,提问作者Maor Salman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:27:03