Leider unterstützt MySQL keine CHECK-Einschränkungen . Es analysiert sie und verwirft dann stillschweigend die Einschränkung, genau wie es bei Fremdschlüssel-Einschränkungen in einer MyISAM-Tabelle der Fall ist. Es gibt Ihnen nicht einmal eine Warnung über den nicht unterstützten Einschränkungstyp, was meiner Meinung nach eine schlechte Designentscheidung ihrerseits ist.
Hier ist eine Lösung mit einem 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 //
Sie sollten auch einen ähnlichen Trigger BEFORE UPDATE
erstellen auf demselben Tisch.
Siehe http://dev.mysql.com/doc/refman/ 5.6/en/signal.html
für weitere Informationen zum SIGNAL
-Anweisung zum Auslösen von Ausnahmen in MySQL-Triggern oder gespeicherten Routinen.