回答

收藏

如何在mySql的几列上定义条件非null约束?

技术问答 技术问答 57 人阅读 | 0 人回复 | 2023-09-12

我的数据库里有一个表。这个表包含几列,分别是A,B,C,D,E,F和G。我想以D,E或F至少一个不为null定义约束的方式。有可能吗?MySql。谢谢0 Y0 D; B+ J) `8 ]  a* U% C
                                                                ) I" a0 h. P" H# c, D
    解决方案:                                                               
% E4 n/ g0 b# L& q                                                                不幸的是,MySQL不支持CHECK约束。它解析它们,然后静默丢弃该约束,就像对MyISAM表上的外键约束是一样的。它甚至没有警告你不支持的约束类型,我认为这对他们来说是一个错误的设计决定。7 ^* t8 J6 \+ f
这是使用触发器的解决方案:$ A3 E! c2 |6 E9 H0 V7 f
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 SET MESSAGE_TEXT = 'One of D,E,or F must have a non-null value.    END IF //您还应该BEFORE UPDATE在同一张表上创建类似的触发器。) X$ |, n# G+ k( w
有关在MySQL更多关于触发器或存储例程中异常语句的信息,请参见http://dev.mysql.com/doc/refman/5.6/en/signal.htmlSIGNAL。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则