sql >> Base de Datos >  >> RDS >> Mysql

¿Existe alguna solución para definir una restricción única que trate los valores NULL como no distintos?

Como se documenta en CREATE INDEX Sintaxis :

No puede definir un índice sobre una expresión (como se indica en su pregunta), por lo tanto, UNIQUE de MySQL los índices no pueden aplicar la restricción como desee.

En su lugar, puede crear un BEFORE INSERT gatillo que genera un error si ya existe un registro coincidente:

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 Si no causa un problema similar, probablemente desee crear un BEFORE UPDATE similar. desencadenar también.