首页 >数据库 >mysql教程 >MySQL CHECK 约束如何工作,以及如何确保旧版本和新版本中的数据验证?

MySQL CHECK 约束如何工作,以及如何确保旧版本和新版本中的数据验证?

Barbara Streisand
Barbara Streisand原创
2025-01-10 10:32:42358浏览

How Do MySQL CHECK Constraints Work, and How Can I Ensure Data Validation in Older and Newer Versions?

MySQL中的CHECK约束

在尝试向MySQL表添加CHECK约束时,当插入违反约束的数据时,可能会遇到意外行为。本文将深入探讨MySQL中CHECK约束的细微之处,并提供一个强制验证的解决方案。

在MySQL的早期版本(直到8.0.15)中,CHECK约束已定义但未强制执行。正如MySQL参考手册中所述:“CHECK子句由所有存储引擎解析但被忽略。”

MySQL 8.0.15及更早版本的解决方案

为了在缺乏原生CHECK约束支持的情况下强制执行数据验证,您可以创建一个触发器:

<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语句,如果SD列的值小于0,则将其修改为0,确保约束得到维护。

MySQL 8.0.16及更高版本的CHECK约束

MySQL 8.0.16引入了对CHECK约束的全面支持。要在8.0.16或更高版本中定义CHECK约束,请使用以下语法:

<code class="language-sql">CREATE TABLE Customer (
  SD integer CHECK (SD > 0),
  Last_Name varchar (30),
  First_Name varchar(30)
);</code>

MySQL现在将强制执行约束,并阻止插入违反约束的数据。

以上是MySQL CHECK 约束如何工作,以及如何确保旧版本和新版本中的数据验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn