Como se documenta en CREATE INDEX
Sintaxis
:
No puede definir un índice sobre una expresión (como se indica en su pregunta), por lo tanto, UNIQUE
de MySQL los índices no pueden aplicar la restricción como desee.
En su lugar, puede crear un BEFORE INSERT
gatillo
que genera un error si ya existe un registro coincidente:
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
Si no causa un problema similar, probablemente desee crear un BEFORE UPDATE
similar. desencadenar también.