回答

收藏

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

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

我的数据库里有一个表。这个表包含几列,分别是A,B,C,D,E,F和G。我想以D,E或F至少一个不为null定义约束的方式。有可能吗?MySql。谢谢
5 G/ Z& U7 m# v1 G# t1 V% u8 t                                                               
7 `' r- v; T. y- u( j0 b0 Q& f' |    解决方案:                                                                  p9 B  C% x5 g
                                                                不幸的是,MySQL不支持CHECK约束。它解析它们,然后静默丢弃该约束,就像对MyISAM表上的外键约束是一样的。它甚至没有警告你不支持的约束类型,我认为这对他们来说是一个错误的设计决定。
  \: A! E* ?" S! O" q: o  i) @- f这是使用触发器的解决方案:
5 l3 S2 M" z! K& m0 c3 P% g9 Omysql> 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 s6 j& j, E# `' t+ c* k有关在MySQL更多关于触发器或存储例程中异常语句的信息,请参见http://dev.mysql.com/doc/refman/5.6/en/signal.htmlSIGNAL。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则