Rất tiếc, MySQL không hỗ trợ ràng buộc CHECK . Nó phân tích cú pháp chúng và sau đó âm thầm loại bỏ ràng buộc, giống như đối với các ràng buộc khóa ngoại trên bảng MyISAM. Nó thậm chí không cung cấp cho bạn cảnh báo về loại ràng buộc không được hỗ trợ, mà tôi nghĩ rằng đó là một quyết định thiết kế tồi từ phía họ.
Đây là giải pháp sử dụng trình kích hoạt:
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 //
Bạn cũng nên tạo một trình kích hoạt tương tự BEFORE UPDATE
trên cùng một bảng.
Xem http://dev.mysql.com/doc/refman/ 5.6 / vi / signal.html
để biết thêm thông tin về SIGNAL
để nêu ra các ngoại lệ trong các trình kích hoạt MySQL hoặc các quy trình được lưu trữ.