Comme documenté sous CREATE INDEX
Syntaxe
:
Vous ne pouvez pas définir un index sur une expression (comme indiqué dans votre question), donc le UNIQUE
de MySQL les index ne peuvent pas appliquer la contrainte comme vous le souhaitez.
Au lieu de cela, vous pouvez créer un BEFORE INSERT
déclencheur
qui génère une erreur si un enregistrement correspondant existe déjà :
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;;
Pour empêcher UPDATE
s de causer un problème similaire, vous voudrez probablement créer un BEFORE UPDATE
similaire déclencher aussi.