Unikalne ograniczenie, które dopuszcza puste wartości w MySQL

125

Mam pole przechowujące kody produktów. Kody są unikalne, ale niektóre produkty po prostu nie mają kodu. Nie mogę wymyślać kodów, ponieważ są to kody dostawców.

Czy tego rodzaju ograniczenie jest możliwe w MySQL?

Jestem noobem z procedurami składowanymi i wyzwalaczami, więc jeśli rozwiązanie obejmuje jeden z nich, prosimy o cierpliwość.

Aktualizacja: kolumna NIE jest pusta. Dlatego nie mogłem tego zrobić.

Dezintegrator
źródło
@AmirAliAkbari To zabawne, jak te dwie strony łączą się ze sobą jako „możliwy duplikat”. Ale ten jest starszy. :)
Pijusn

Odpowiedzi:

182

Tak, możesz to zrobić. Zobacz dokumentację MySQL (wersja 5.5) .

Indeks UNIQUE tworzy takie ograniczenie, że wszystkie wartości w indeksie muszą być różne. Podczas próby dodania nowego wiersza z wartością klucza pasującą do istniejącego wiersza występuje błąd. W przypadku wszystkich silników indeks UNIQUE dopuszcza wiele wartości NULL dla kolumn, które mogą zawierać wartość NULL.

EricC
źródło
8
Dzięki. Muszę sprawić, by było to niemożliwe
The Disintegrator
miał ten problem w modelu django. Dopuszczenie wartości null działa. Dzięki
Shrey
13

Tak, jeśli ustawisz wartość null w kolumnie kodu produktu (nie zadeklarowano za pomocą NOT NULL), klucz unikatowy zezwoli na wiele wierszy z NULLkodami produktów.

chaos
źródło
Dzięki. Muszę sprawić, by było to niemożliwe
The Disintegrator
8

MySQL nadal pozwala, aby wiele wierszy miało wartość NULLw unikalnej kolumnie.

cg.
źródło
Dzięki. Muszę sprawić, by było to niemożliwe
The Disintegrator
@MianAnjum pogrubione: CREATE TABLE table( keyint (11) NOT NULL AUTO_INCREMENT, fieldtinyint (1) DEFAULT NULL )
Paul Nowak