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

Ràng buộc duy nhất kiểm tra hai cột trong MySQL

Bạn có thể làm điều đó với BEFORE kích hoạt theo cách này

CREATE TRIGGER tg_bi_mytable
BEFORE INSERT ON mytable
FOR EACH ROW
  SET NEW.address1 = IF(EXISTS
     (
       SELECT * 
        FROM mytable 
       WHERE address1 IN(NEW.address1, NEW.address2) 
          OR address2 IN(NEW.address1, NEW.address2)
     ), NULL, NEW.address1);

Lưu ý: Vì bạn đang sử dụng phiên bản MySQL thiếu SIGNAL thủ thuật là vi phạm NOT NULL ràng buộc trên một trong các cột khi các hàng có cùng địa chỉ được tìm thấy.

Đây là SQLFiddle thử nghiệm. Bỏ ghi chú một trong những câu lệnh chèn cuối cùng và nhấp vào Build Schema . Những lần chèn này sẽ không thành công.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép / nhân bản cơ sở dữ liệu mà không cần sử dụng mysqldump

  2. Cách lưu trữ URL trong MySQL

  3. MYSQL:Sự khác biệt giữa Binary và Blob

  4. Ví dụ tối thiểu về việc sử dụng select ... để cập nhật để cô lập các hàng

  5. Làm thế nào để bạn sử dụng mệnh đề MySql IN