Уникальное ограничение, разрешающее пустые значения в MySQL

У меня есть поле, в котором хранятся коды продуктов. Коды уникальны, но некоторые продукты просто не имеют кода. Я не могу изобретать коды, потому что это коды провайдеров.

Возможно ли такое ограничение в MySQL?

Я новичок в хранимых процедурах и триггерах, поэтому, если решение включает одну из них, проявите терпение.

Обновление: столбец НЕ равен нулю. Вот почему я не смог этого сделать.


person The Disintegrator    schedule 28.08.2009    source источник
comment
Возможный дубликат игнорирует ли MySQL значения NULL в уникальных ограничениях?   -  person Amir Ali Akbari    schedule 07.11.2016


Ответы (3)


Да, ты можешь это сделать. См. справочник по MySQL (версия 5.5).

Индекс UNIQUE создает ограничение, так что все значения в индексе должны быть разными. Ошибка возникает, если вы пытаетесь добавить новую строку со значением ключа, которое соответствует существующей строке. Для всех механизмов индекс UNIQUE допускает несколько значений NULL для столбцов, которые могут содержать NULL.

person Community    schedule 28.08.2009
comment
Спасибо. Я должен сделать его нулевым - person The Disintegrator; 28.08.2009
comment
была эта проблема в модели django. Создание нулевого значения работает. Спасибо - person Shrey; 23.06.2016

Да, если вы сделаете столбец кода продукта допускающим значение NULL (не объявленным с помощью NOT NULL), уникальный ключ позволит использовать несколько строк с кодами продукта NULL.

person chaos    schedule 28.08.2009
comment
Спасибо. Я должен сделать его нулевым - person The Disintegrator; 28.08.2009

MySQL по-прежнему позволяет нескольким строкам иметь значение NULL в уникальном столбце.

person cg.    schedule 28.08.2009
comment
Спасибо. Я должен сделать его нулевым - person The Disintegrator; 28.08.2009
comment
@MianAnjum жирным шрифтом: CREATE TABLE table (key int (11) NOT NULL AUTO_INCREMENT, field tinyint (1) DEFAULT NULL) - person Paul Nowak; 19.09.2017