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ć.



@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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.