sql >> Database >  >> RDS >> Mysql

Unieke beperking die twee kolommen in MySQL controleert

Je kunt het doen met een BEFORE op deze manier activeren

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

Opmerking: Aangezien je een MySQL-versie gebruikt die SIGNAL mist de truc is om NOT NULL te schenden beperking op een van de kolommen wanneer rijen met hetzelfde adres zijn gevonden.

Hier is SQLFiddle demonstratie. Maak een van de laatste invoeginstructies ongedaan en klik op Build Schema . Deze invoegingen zullen niet slagen.




  1. Hoe alias een veld of kolom in MySQL?

  2. MySQL invoegen in meerdere tabellen? (Database normalisatie?)

  3. Beste gegevensopslag voor miljarden rijen

  4. Rails ActiveRecord verwerkt een id-kolom die niet de primaire sleutel is