Som dokumenteret under CREATE INDEX
Syntaks
:
Du kan ikke definere et indeks over et udtryk (såsom angivet i dit spørgsmål), derfor er MySQL's UNIQUE
indekser kan ikke gennemtvinge begrænsningen, som du ønsker.
I stedet kan du oprette en BEFORE INSERT
trigger
der giver en fejl, hvis der allerede findes en matchende post:
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;;
For at forhindre UPDATE
Hvis du forårsager et lignende problem, vil du sandsynligvis gerne oprette en lignende BEFORE UPDATE
trigger også.