sql >> Databasteknik >  >> RDS >> Mysql

Unik begränsning som kontrollerar två kolumner i MySQL

Du kan göra det med en BEFORE utlösa på detta sätt

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

Obs! Eftersom du använder en MySQL-version som saknar SIGNAL Tricket är att bryta mot NOT NULL begränsning på en av kolumnerna när rader med samma adress har hittats.

Här är SQLFiddle demo. Avkommentera ett av de senaste infogningssatserna och klicka på Build Schema . Dessa inlägg kommer inte att lyckas.




  1. Nybörjarguide till lagrade procedurer med MySQL?

  2. Använda Oracle JDeveloper med MySQL Database Service på Oracle Cloud Platform, del 2

  3. 2 sätt att ta bort dubbletter av rader i MariaDB (ignorerar primärnyckel)

  4. PHP, MySQL, PDO - Få resultat från UPDATE-fråga?