Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy istnieje obejście umożliwiające zdefiniowanie ograniczenia unikatowego, które traktuje wartości NULL jako nieróżniące się?

Jak udokumentowano w CREATE INDEX Składnia :

Nie możesz zdefiniować indeksu dla wyrażenia (takiego jak podane w pytaniu), dlatego UNIQUE MySQL indeksy nie mogą wymuszać ograniczenia, jak chcesz.

Zamiast tego możesz utworzyć BEFORE INSERT wyzwalacz który zgłasza błąd, jeśli pasujący rekord już istnieje:

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

Aby zapobiec UPDATE od spowodowania podobnego problemu, prawdopodobnie będziesz chciał utworzyć podobny BEFORE UPDATE również wyzwalacz.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd krytyczny:wywołanie niezdefiniowanej funkcji getsqlvaluestring()

  2. Ceny pokoi hotelowych dla różnych pór roku

  3. Bardzo konkretne zapytanie MySQL, które chcę poprawić

  4. Jak wstawić dane do wielu tabel z zaangażowanymi zależnościami klucza obcego (MySQL)

  5. Wygląda na to, że nie mogę połączyć mojej strony PHP z serwerem testowym SQL i bazą danych