MySQL understøtter desværre ikke CHECK-begrænsninger . Den analyserer dem og kasserer derefter begrænsningen stille, ligesom den gør for fremmednøglebegrænsninger på en MyISAM-tabel. Det giver dig ikke engang en advarsel om den ikke-understøttede begrænsningstype, hvilket jeg synes er en dårlig designbeslutning fra deres side.
Her er en løsning ved hjælp af 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 også oprette en lignende trigger BEFORE UPDATE
på samme bord.
Se http://dev.mysql.com/doc/refman/ 5.6/da/signal.html
for mere information om SIGNAL
sætning for at rejse undtagelser i MySQL-udløsere eller lagrede rutiner.