Niestety MySQL nie obsługuje ograniczeń CHECK . Analizuje je, a następnie dyskretnie odrzuca ograniczenie, podobnie jak w przypadku ograniczeń kluczy obcych w tabeli MyISAM. Nie daje nawet ostrzeżenia o nieobsługiwanym typie ograniczenia, co moim zdaniem jest złą decyzją projektową z ich strony.
Oto rozwiązanie wykorzystujące wyzwalacz:
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 //
Powinieneś także utworzyć podobny wyzwalacz BEFORE UPDATE
na tym samym stole.
Zobacz http://dev.mysql.com/doc/refman/ 5.6/pl/sygnał.html
aby uzyskać więcej informacji na temat SIGNAL
instrukcja zgłaszania wyjątków w wyzwalaczach MySQL lub przechowywanych procedurach.