我的数据库里有一个表。这个表包含几列,分别是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。