sql >> Database >  >> RDS >> Mysql

Is er een tijdelijke oplossing voor het definiëren van een unieke beperking die NULL-waarden als niet-onderscheiden behandelt?

Zoals gedocumenteerd onder CREATE INDEX Syntaxis :

U kunt geen index definiëren over een uitdrukking (zoals gegeven in uw vraag), daarom is MySQL's UNIQUE indexen kunnen de beperking niet afdwingen zoals u dat wilt.

In plaats daarvan kunt u een BEFORE INSERT trigger die een fout oplevert als er al een overeenkomend record bestaat:

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

Om UPDATE te voorkomen Als u een soortgelijk probleem niet veroorzaakt, wilt u waarschijnlijk een soortgelijk BEFORE UPDATE maken trigger ook.




  1. Booleaanse parameter doorgeven aan Oracle-procedure C#

  2. Hoe kleine letters naar hoofdletters te converteren in MySQL

  3. Wat is de beste manier om datums te beheren in PHP, MySQL, enz.?

  4. Samengestelde primaire sleutel maken in SQL Server