Helaas ondersteunt MySQL geen CHECK-beperkingen . Het ontleedt ze en verwerpt vervolgens stilletjes de beperking, net zoals het doet voor externe sleutelbeperkingen op een MyISAM-tabel. Het geeft je niet eens een waarschuwing over het niet-ondersteunde type beperking, wat volgens mij een slechte ontwerpbeslissing van hun kant is.
Hier is een oplossing met een trigger:
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 //
U moet ook een vergelijkbare trigger maken BEFORE UPDATE
aan dezelfde tafel.
Zie http://dev.mysql.com/doc/refman/ 5.6/nl/signaal.html
voor meer informatie over het SIGNAL
statement om uitzonderingen op te roepen in MySQL-triggers of opgeslagen routines.