Tyvärr stöder MySQL inte CHECK-begränsningar . Den analyserar dem och förkastar sedan begränsningen tyst, precis som den gör för begränsningar för främmande nyckel på en MyISAM-tabell. Det ger dig inte ens en varning om den ostödda begränsningstypen, vilket jag tycker är ett dåligt designbeslut från deras sida.
Här är en lösning med en 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 //
Du bör också skapa en liknande trigger BEFORE UPDATE
på samma bord.
Se http://dev.mysql.com/doc/refman/ 5.6/sv/signal.html
för mer information om SIGNAL
uttalande för att ta fram undantag i MySQL-utlösare eller lagrade rutiner.