Zoals gedocumenteerd onder CREATE INDEX Syntaxis
:
U kunt geen index definiëren over een uitdrukking (zoals gegeven in uw vraag), daarom is MySQL's UNIQUE indexen kunnen de beperking niet afdwingen zoals u dat wilt.
In plaats daarvan kunt u een BEFORE INSERT trigger
die een fout oplevert als er al een overeenkomend record bestaat:
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;;
Om UPDATE te voorkomen Als u een soortgelijk probleem niet veroorzaakt, wilt u waarschijnlijk een soortgelijk BEFORE UPDATE maken trigger ook.