Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Eindeutige Einschränkung, die zwei Spalten in MySQL überprüft

Sie können dies mit einem BEFORE tun auf diese Weise auslösen

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

Hinweis: Da Sie eine MySQL-Version verwenden, der SIGNAL fehlt Der Trick besteht darin, gegen NOT NULL zu verstoßen Beschränkung auf eine der Spalten, wenn Zeilen mit der gleichen Adresse gefunden wurden.

Hier ist SQLFiddle Demo. Entkommentieren Sie eine der letzten Insert-Anweisungen und klicken Sie auf Build Schema . Diese Einfügungen werden nicht erfolgreich sein.