Jak je zdokumentováno v části CREATE INDEX
Syntaxe
:
Nemůžete definovat index přes výraz (jako je uveden ve vaší otázce), proto je UNIQUE
MySQL indexy nemohou vynutit omezení, jak si přejete.
Místo toho můžete vytvořit BEFORE INSERT
spouštěč
to vyvolá chybu, pokud odpovídající záznam již existuje:
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;;
Chcete-li zabránit UPDATE
Pokud nezpůsobíte podobný problém, pravděpodobně budete chtít vytvořit podobný BEFORE UPDATE
spouště také.