Mysql
 sql >> Base de données >  >> RDS >> Mysql

Contrainte unique qui vérifie deux colonnes dans MySQL

Vous pouvez le faire avec un BEFORE déclencher de cette façon

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);

Remarque : Puisque vous utilisez une version de MySQL qui manque de SIGNAL l'astuce consiste à violer NOT NULL contrainte sur une des colonnes lorsque des lignes ayant la même adresse ont été trouvées.

Voici SQLFiddle démo. Décommentez l'une des dernières instructions d'insertion et cliquez sur Build Schema . Ces insertions échoueront.