Както е документирано под 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
задейства също.