Унікальне обмеження, яке дозволяє пусті значення в MySQL


125

У мене є поле, в якому зберігаються коди товарів. Коди унікальні, але деякі продукти просто не мають коду. Я не можу вигадувати коди, оскільки це коди провайдерів.

Чи можливе таке обмеження в MySQL?

Я нобій зі збереженими процедурами та тригерами, тому, якщо рішення стосується однієї з них, будь ласка, наберіться терпіння.

Оновлення: стовпець НЕ нульовий. Ось чому я не зміг цього зробити.



@AmirAliAkbari Смішно, як ці двоє пов'язують один одного як "можливий дублікат". Цей, однак, старший. :)
Pijusn

Відповіді:


182

Так, ви можете це зробити. Дивіться посилання на MySQL (версія 5.5) .

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


8
Дякую. Я маю зробити це незмінним
The Disintegrator

була ця проблема в моделі джанго. Зробити це знімним твором. Спасибі
Шрі

13

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


Дякую. Я маю зробити це незмінним
The Disintegrator

8

MySQL все ще дозволяє для кількох рядків мати значення NULLв унікальній колонці.


Дякую. Я маю зробити це незмінним
The Disintegrator

@MianAnjum жирним шрифтом: CREATE TABLE table( keyint (11) NOT NULL AUTO_INCREMENT, fieldtinyint (1) DEFAULT NULL )
Пол Новак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.