回答

收藏

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

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

我的数据库里有一个表。这个表包含几列,分别是A,B,C,D,E,F和G。我想以D,E或F至少一个不为null定义约束的方式。有可能吗?MySql。谢谢! p) Y' z" y$ M2 w  K% X& B
                                                                4 R7 ~% f; }8 ~: H7 U! u
    解决方案:                                                               
7 a8 \' ?$ @9 A* T& ?$ B1 c                                                                不幸的是,MySQL不支持CHECK约束。它解析它们,然后静默丢弃该约束,就像对MyISAM表上的外键约束是一样的。它甚至没有警告你不支持的约束类型,我认为这对他们来说是一个错误的设计决定。# O$ f; o( E$ L/ _( v! E
这是使用触发器的解决方案:
% q! S. B1 r( g: p# u/ fmysql> 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在同一张表上创建类似的触发器。
7 }" @2 ^$ A: _3 ~  w2 `7 u: \' @) j有关在MySQL更多关于触发器或存储例程中异常语句的信息,请参见http://dev.mysql.com/doc/refman/5.6/en/signal.htmlSIGNAL。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则