Seperti yang didokumentasikan dalam CREATE INDEX
Sintaks
:
Anda tidak dapat menentukan indeks di atas ekspresi (seperti yang diberikan dalam pertanyaan Anda), oleh karena itu UNIQUE
MySQL indeks tidak dapat menerapkan batasan seperti yang Anda inginkan.
Sebagai gantinya, Anda dapat membuat BEFORE INSERT
pemicu
yang menimbulkan kesalahan jika catatan yang cocok sudah ada:
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;;
Untuk mencegah UPDATE
s dari menyebabkan masalah serupa, Anda mungkin ingin membuat BEFORE UPDATE
yang serupa pemicu juga.