Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли заобиколно решение за дефиниране на уникално ограничение, което третира NULL стойности като неразличими?

Както е документирано под CREATE INDEX Синтаксис :

Не можете да дефинирате индекс върху израз (като даден във вашия въпрос), следователно UNIQUE на MySQL индексите не могат да наложат ограничението, както желаете.

Вместо това можете да създадете BEFORE INSERT задействане което предизвиква грешка, ако вече съществува съвпадащ запис:

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

За да предотвратите UPDATE Ако не предизвикате подобен проблем, вероятно ще искате да създадете подобен BEFORE UPDATE задейства също.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Параметризирана IN клауза в подготвено изявление с помощта на MySql, PHP и ADODB

  2. Неизвестна колона в подзаявката на mysql

  3. MySQL:изберете заявка, увеличение от 5 минути

  4. Заявка за намиране на таблици, променени през последния час

  5. Начален час за изпълнение на Mysql събития