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.