2010-06-21 13 views
9

Zauważyłem, że jeśli mam unikalne klucze złożone dla dwóch kolumn, column_a i column_b, to mój sql ignoruje to ograniczenie, jeśli jedna kolumna ma wartość null.MySql złożone klucze i wartości null

E.g.

jeśli column_a = 1 column_b = NULL można wstawić column_a = 1 column_b = NULL jak I jak

jeśli column_a = 1 column_b = 2 można wstawić tylko tę wartość raz.

Czy istnieje sposób zastosowania tego ograniczenia, oprócz zmiany kolumn na Not Null i ustawienia wartości domyślnych?

Odpowiedz

13

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

„unikatowy indeks tworzy ograniczenie takie, że wszystkie wartości w indeksie muszą być wyraźne. Błąd występuje, jeśli spróbujesz dodać nowy wiersz z kluczowych wartości, która odpowiada istniejący wiersz. To ograniczenie nie ma zastosowania do wartości NULL, z wyjątkiem mechanizmu przechowywania danych BDB.W przypadku innych silników indeks UNIQUE dopuszcza wiele wartości NULL dla kolumn, które mogą zawierać wartość NULL. "

Nie, nie można uznać, że MySQL traktuje NULL jako unikalną wartość. Sądzę, że masz kilka możliwości: możesz zrobić to, co sugerujesz w swoim pytaniu i zapisać "wartość specjalną" zamiast wartości null, lub możesz użyć silnika BDB do tabeli. Nie sądzę, by ta niewielka różnica w zachowaniu uzasadniała dokonanie niezwykłego wyboru silnika do przechowywania danych.

+0

Dzięki Hammer! tak, przechowywanie specjalnej wartości nie zaszkodzi zbytnio i zdecydowanie jest dla mnie lepszą opcją niż zmiana mechanizmu przechowywania. – stevebot

Powiązane problemy