Conforme documentado em
CREATE INDEX
Sintaxe
:Você não pode definir um índice sobre uma expressão (como dado em sua pergunta), portanto, o
UNIQUE
do MySQL índices não podem impor a restrição como você deseja. Em vez disso, você pode criar um
BEFORE INSERT
gatilho
que gera um erro se já existir um registro correspondente: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;;
Para evitar
UPDATE
s de causar um problema semelhante, você provavelmente desejará criar um BEFORE UPDATE
semelhante acionar também.