首页 > 数据库 > mysql教程 > 为什么我的 MySQL CHECK 约束不起作用?

为什么我的 MySQL CHECK 约束不起作用?

Mary-Kate Olsen
发布: 2025-01-10 11:20:45
原创
559 人浏览过

Why Aren't My MySQL CHECK Constraints Working?

了解 MySQL 中的 CHECK 约束行为

MySQL 对 CHECK 约束的处理有时可能会出乎意料。 即使定义正确,CHECK 约束也可能看起来不活动。 关键是了解MySQL版本兼容性。

MySQL 8.0.16 是第一个完全支持 CHECK 约束的版本。 如果您的 MySQL 版本早于 8.0.16,则 CHECK 子句将被所有存储引擎解析但忽略。 违反约束的数据将被正确插入。

查阅官方MySQL参考手册(https://www.php.cn/link/e6c19a87ef9e816e02ce247d4f41d38a)来确认您的MySQL版本的功能。

CHECK 约束的替代方案(对于较旧的 MySQL 版本):

如果您的 MySQL 版本缺乏 CHECK 约束支持,请考虑使用触发器。触发器执行自定义代码以响应行插入等数据库事件。 触发器可以在插入之前验证数据,确保数据完整性。

例如,为 SD 表中的 Customer 字段强制执行非负值的触发器可以是:

<code class="language-sql">DELIMITER //
CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer
FOR EACH ROW
BEGIN
  IF NEW.SD < 0 THEN
    SET NEW.SD = 0;
  END IF;
END //
DELIMITER ;</code>
登录后复制

此触发器拦截 INSERT 表上的 Customer 语句。如果 SD 为负数,则触发器将其设置为零。 这提供了与 CHECK 约束类似的功能。

以上是为什么我的 MySQL CHECK 约束不起作用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板