Som dokumenterats under CREATE INDEX
Syntax
:
Du kan inte definiera ett index över ett uttryck (såsom anges i din fråga), därför MySQL:s UNIQUE
index kan inte genomdriva begränsningen som du vill.
Istället kan du skapa en BEFORE INSERT
trigger
som ger upphov till ett fel om en matchande post redan finns:
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;;
För att förhindra UPDATE
Om du orsakar ett liknande problem kommer du förmodligen att vilja skapa en liknande BEFORE UPDATE
trigger också.