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中文网其他相关文章!