Както е документирано под CREATE INDEX Синтаксис
:
Не можете да дефинирате индекс върху израз (като даден във вашия въпрос), следователно UNIQUE на MySQL индексите не могат да наложат ограничението, както желаете.
Вместо това можете да създадете BEFORE INSERT задействане
което предизвиква грешка, ако вече съществува съвпадащ запис:
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;;
За да предотвратите UPDATE Ако не предизвикате подобен проблем, вероятно ще искате да създадете подобен BEFORE UPDATE задейства също.