Sayangnya, MySQL tidak mendukung batasan CHECK . Ini mem-parsing mereka dan kemudian diam-diam membuang kendala, seperti halnya untuk kendala kunci asing pada tabel MyISAM. Itu bahkan tidak memberi Anda peringatan tentang jenis batasan yang tidak didukung, yang menurut saya merupakan keputusan desain yang buruk di pihak mereka.
Berikut solusi menggunakan pemicu:
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 //
Anda juga harus membuat pemicu serupa BEFORE UPDATE
di meja yang sama.
Lihat http://dev.mysql.com/doc/refman/ 5.6/en/signal.html
untuk informasi lebih lanjut tentang SIGNAL
pernyataan untuk memunculkan pengecualian di pemicu MySQL atau rutinitas tersimpan.