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

Có giải pháp nào để xác định ràng buộc duy nhất coi các giá trị NULL là không khác biệt không?

Như được ghi lại trong CREATE INDEX Cú pháp :

Bạn không thể xác định một chỉ mục trên một biểu thức (chẳng hạn như được đưa ra trong câu hỏi của bạn), do đó, UNIQUE của MySQL các chỉ mục không thể thực thi ràng buộc như bạn muốn.

Thay vào đó, bạn có thể tạo BEFORE INSERT trình kích hoạt điều này làm phát sinh lỗi nếu bản ghi phù hợp đã tồn tại:

DELIMITER ;;

CREATE TRIGGER uniq1 BEFORE INSERT ON my_table FOR EACH ROW
  IF EXISTS(
    SELECT *
    FROM   my_table
    WHERE  column1 <=> NEW.column1 AND column2 <=> NEW.column2
    LIMIT  1
  ) THEN
    SIGNAL
      SQLSTATE '23000'
      SET MESSAGE_TEXT = 'Duplicate entry for key uniq1';
  END IF;;

Để ngăn UPDATE do gây ra sự cố tương tự, bạn có thể sẽ muốn tạo một BEFORE UPDATE tương tự cũng kích hoạt.




  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 để chọn hàng đầu tiên cho mỗi nhóm trong MySQL?

  2. EF Core 2.0 Identity - Thêm thuộc tính điều hướng

  3. Có bất kỳ cạm bẫy / điều gì bạn cần biết khi chuyển từ MyISAM sang InnoDB không

  4. Tìm kiếm toàn văn bản MySQL và SOUNDEX

  5. mysql sang php sang xml hiển thị tuổi trống