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.