Wie unter CREATE INDEX
dokumentiert Syntax
:
Sie können keinen Index über einen Ausdruck definieren (wie in Ihrer Frage angegeben), daher MySQLs UNIQUE
Indizes können die Einschränkung nicht wie gewünscht erzwingen.
Stattdessen können Sie einen BEFORE INSERT
erstellen Auslöser
das einen Fehler auslöst, wenn bereits ein passender Datensatz existiert:
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;;
Um UPDATE
zu verhindern Um ein ähnliches Problem zu vermeiden, möchten Sie wahrscheinlich einen ähnlichen BEFORE UPDATE
erstellen auch auslösen.