gpt4 book ai didi

mysql - 如何在 mySql 中的多个列上定义条件非空约束?

转载 作者:可可西里 更新时间:2023-11-01 08:32:17 30 4
gpt4 key购买 nike

我的数据库中有一个表。该表包含多个列,例如 A、B、C、D、E、F 和 G。我想以 D、E 或 F 中至少一个不应该为空的方式定义约束。这可能吗?我正在使用 MySql。谢谢

最佳答案

不幸的是,MySQL does not support CHECK constraints .它解析它们然后默默地丢弃约束,就像它对 MyISAM 表上的外键约束所做的那样。它甚至没有就不受支持的约束类型向您发出警告,我认为这对他们来说是一个糟糕的设计决定。

这是一个使用触发器的解决方案:

mysql> DELIMITER //
mysql> CREATE TRIGGER check_one_not_null BEFORE INSERT ON mytable FOR EACH ROW
IF COALESCE(NEW.D, NEW.E, NEW.F) IS NULL
THEN SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'One of D, E, or F must have a non-null value.';
END IF //

您还应该在同一张表上创建一个类似的触发器BEFORE UPDATE

参见 http://dev.mysql.com/doc/refman/5.6/en/signal.html有关在 MySQL 触发器或存储例程中引发异常的 SIGNAL 语句的更多信息。

关于mysql - 如何在 mySql 中的多个列上定义条件非空约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23877063/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com