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