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

Unik begrænsning, der kontrollerer to kolonner i MySQL

Du kan gøre det med en BEFORE udløse på denne måde

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

Bemærk: Da du bruger en MySQL-version, der mangler SIGNAL Tricket er at overtræde NOT NULL begrænsning på en af ​​kolonnerne, når rækker med samme adresse er fundet.

Her er SQLFiddle demo. Fjern kommentarer til en af ​​de sidste indsæt-sætninger, og klik på Build Schema . Disse indsættelser vil ikke lykkes.




  1. Brug af COALESCE til at håndtere NULL-værdier i PostgreSQL

  2. Entity Framework + MySQL - Hvorfor er ydeevnen så forfærdelig?

  3. Vigtigheden af ​​vedligeholdelse på MSDB

  4. Videregivelse af array til Oracle-procedure fra c#