За съжаление, MySQL не поддържа ограничения CHECK . Той ги анализира и след това мълчаливо отхвърля ограничението, точно както прави за ограничения на външен ключ на MyISAM таблица. Дори не ви дава предупреждение за неподдържания тип ограничение, което според мен е лошо дизайнерско решение от тяхна страна.
Ето решение с помощта на тригер:
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 //
Трябва също да създадете подобен тригер BEFORE UPDATE
на същата маса.
Вижте http://dev.mysql.com/doc/refman/ 5.6/en/signal.html
за повече информация относно SIGNAL
израз за предизвикване на изключения в MySQL тригери или съхранени рутинни процедури.