sql >> Databasteknik >  >> RDS >> Mysql

Finns det en lösning för att definiera en unik restriktion som behandlar NULL-värden som icke-särskilda?

Som dokumenterats under CREATE INDEX Syntax :

Du kan inte definiera ett index över ett uttryck (såsom anges i din fråga), därför MySQL:s UNIQUE index kan inte genomdriva begränsningen som du vill.

Istället kan du skapa en BEFORE INSERT trigger som ger upphov till ett fel om en matchande post redan finns:

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

För att förhindra UPDATE Om du orsakar ett liknande problem kommer du förmodligen att vilja skapa en liknande BEFORE UPDATE trigger också.




  1. Så här fixar du "Konverteringen misslyckades när värdet konverterades till datatyp" i SQL Server

  2. Skillnaden mellan sys.objects, sys.system_objects och sys.all_objects i SQL Server

  3. MySQL Group Resultat per dag med tidsstämpel

  4. mysql fulltextsökning fungerar inte för 3 tecken