Come documentato in CREATE INDEX
Sintassi
:
Non puoi definire un indice su un'espressione (come quella fornita nella tua domanda), quindi UNIQUE
di MySQL gli indici non possono applicare il vincolo come desideri.
Invece, puoi creare un BEFORE INSERT
trigger
che genera un errore se esiste già un record corrispondente:
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;;
Per impedire UPDATE
s dal causare un problema simile, probabilmente vorrai creare un BEFORE UPDATE
simile attivare anche.