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

125

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

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

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

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

Дезинтегратор
источник
@AmirAliAkbari Забавно, как эти двое ссылаются друг на друга как "возможный дубликат". А этот старше. :)
Пиюсн

Ответы:

182

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

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

EricC
источник
8
Спасибо. Я должен сделать его обнуляемым
Дезинтегратор
была эта проблема в модели django. Создание нулевого значения работает. Спасибо
Шрей
13

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

хаос
источник
Спасибо. Я должен сделать его обнуляемым
Дезинтегратор
8

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

Cg.
источник
Спасибо. Я должен сделать его обнуляемым
Дезинтегратор
@MianAnjum жирным шрифтом: CREATE TABLE table( keyint (11) NOT NULL AUTO_INCREMENT, fieldtinyint (1) DEFAULT NULL )
Пол Новак