Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để xác định các ràng buộc có điều kiện không rỗng trên một số cột trong mySql?

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ữ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để lấy ngày và giờ hiện tại trong MySQL?

  2. Lỗi mã hóa PHP khi tạo XML từ cơ sở dữ liệu

  3. Làm thế nào để cập nhật trường để thêm giá trị vào giá trị hiện có?

  4. Lỗi MySQL:# 1142 - Lệnh SELECT bị từ chối đối với người dùng

  5. XÓA bằng cách sử dụng LEFT JOIN với LIMIT trong MySQL