Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Existe uma solução alternativa para definir uma restrição exclusiva que trata valores NULL como não distintos?


Conforme documentado em CREATE INDEX Sintaxe :

Você não pode definir um índice sobre uma expressão (como dado em sua pergunta), portanto, o UNIQUE do MySQL índices não podem impor a restrição como você deseja.

Em vez disso, você pode criar um BEFORE INSERT gatilho que gera um erro se já existir um registro correspondente:
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;;

Para evitar UPDATE s de causar um problema semelhante, você provavelmente desejará criar um BEFORE UPDATE semelhante acionar também.