Mysql
 sql >> Database >  >> RDS >> Mysql

Vincolo univoco che controlla due colonne in MySQL

Puoi farlo con un BEFORE attivare in questo modo

CREATE TRIGGER tg_bi_mytable
BEFORE INSERT ON mytable
FOR EACH ROW
  SET NEW.address1 = IF(EXISTS
     (
       SELECT * 
        FROM mytable 
       WHERE address1 IN(NEW.address1, NEW.address2) 
          OR address2 IN(NEW.address1, NEW.address2)
     ), NULL, NEW.address1);

Nota: Dato che stai usando una versione di MySQL che manca di SIGNAL il trucco è violare NOT NULL vincolo su una delle colonne quando sono state trovate righe con lo stesso indirizzo.

Ecco SQLFiddle demo. Decommenta una delle ultime istruzioni di inserimento e fai clic su Build Schema . Questi inserti non avranno successo.