Bohužel MySQL nepodporuje omezení CHECK . Analyzuje je a pak tiše zahodí omezení, stejně jako to dělá u omezení cizího klíče v tabulce MyISAM. Dokonce vás ani neupozorní na nepodporovaný typ omezení, což je podle mě z jejich strany špatné rozhodnutí.
Zde je řešení pomocí spouštěče:
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 //
Měli byste také vytvořit podobný spouštěč BEFORE UPDATE
na stejném stole.
Viz http://dev.mysql.com/doc/refman/ 5.6/cs/signal.html
pro více informací o SIGNAL
pro vyvolání výjimek v MySQL triggerech nebo uložených rutinách.