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 https://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.