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

Er der en løsning til at definere en unik begrænsning, der behandler NULL-værdier som ikke-distinkt?

Som dokumenteret under CREATE INDEX Syntaks :

Du kan ikke definere et indeks over et udtryk (såsom angivet i dit spørgsmål), derfor er MySQL's UNIQUE indekser kan ikke gennemtvinge begrænsningen, som du ønsker.

I stedet kan du oprette en BEFORE INSERT trigger der giver en fejl, hvis der allerede findes en matchende post:

DELIMITER ;;

CREATE TRIGGER uniq1 BEFORE INSERT ON my_table FOR EACH ROW
  IF EXISTS(
    SELECT *
    FROM   my_table
    WHERE  column1 <=> NEW.column1 AND column2 <=> NEW.column2
    LIMIT  1
  ) THEN
    SIGNAL
      SQLSTATE '23000'
      SET MESSAGE_TEXT = 'Duplicate entry for key uniq1';
  END IF;;

For at forhindre UPDATE Hvis du forårsager et lignende problem, vil du sandsynligvis gerne oprette en lignende BEFORE UPDATE trigger også.




  1. Hvad er den anbefalede batchstørrelse for SqlBulkCopy?

  2. at bruge mysql LOAD-statment i PHP mislykkes, men at gøre det via kommandolinjen virker

  3. Hvordan kan jeg initialisere en MySQL-database med skema i en Docker-container?

  4. Mysql vælger (n) rækker af hver forekomst