Desafortunadamente, MySQL no admite restricciones CHECK . Los analiza y luego descarta silenciosamente la restricción, tal como lo hace con las restricciones de clave externa en una tabla MyISAM. Ni siquiera le da una advertencia sobre el tipo de restricción no compatible, lo que creo que es una mala decisión de diseño de su parte.
Aquí hay una solución usando un disparador:
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 //
También debe crear un disparador similar BEFORE UPDATE
en la misma mesa.
Consulte http://dev.mysql.com/doc/refman/ 5.6/es/señal.html
para más información sobre la SIGNAL
instrucción para generar excepciones en disparadores de MySQL o rutinas almacenadas.