sql >> Databáze >  >> RDS >> Mysql

Existuje řešení pro definování jedinečného omezení, které považuje hodnoty NULL za odlišné?

Jak je zdokumentováno v části CREATE INDEX Syntaxe :

Nemůžete definovat index přes výraz (jako je uveden ve vaší otázce), proto je UNIQUE MySQL indexy nemohou vynutit omezení, jak si přejete.

Místo toho můžete vytvořit BEFORE INSERT spouštěč to vyvolá chybu, pokud odpovídající záznam již existuje:

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

Chcete-li zabránit UPDATE Pokud nezpůsobíte podobný problém, pravděpodobně budete chtít vytvořit podobný BEFORE UPDATE spouště také.




  1. Výkon funkcí MySql Xml?

  2. Bývalý výkonný ředitel Capgemini, Sunitha Ray, se připojil k ScaleGrid DBaaS, aby rozšířil podnikový prodej

  3. Jak spustit testovací databázi Django pouze v paměti?

  4. Připojení zapalování k aplikaci Microsoft Access