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.