Mam kolumnę e-mail, która chcę być wyjątkowa. Ale chcę też, aby akceptowała wartości zerowe. Czy moja baza danych może zawierać 2 puste wiadomości e-mail w ten sposób?
Mam kolumnę e-mail, która chcę być wyjątkowa. Ale chcę też, aby akceptowała wartości zerowe. Czy moja baza danych może zawierać 2 puste wiadomości e-mail w ten sposób?
Odpowiedzi:
Tak, MySQL dopuszcza wiele wartości NULL w kolumnie z unikalnym ograniczeniem.
CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;
Wynik:
x
NULL
NULL
1
Nie dotyczy to wszystkich baz danych. Na przykład program SQL Server 2005 i starsze zezwala tylko na jedną wartość NULL w kolumnie z unikalnym ograniczeniem.
WHERE column IS NOT NULLmnie nie zawodzi, ponieważ nie jest obsługiwany w mojej wersji MySQL. Czy ktoś wie, gdzie mógłbym spojrzeć?
Z dokumentów :
„indeks UNIKALNY dopuszcza wiele wartości NULL dla kolumn, które mogą zawierać NULL”
Dotyczy to wszystkich silników oprócz BDB .
Nie jestem pewien, czy autor pierwotnie pytał, czy pozwala to na duplikowanie wartości, czy też pojawiło się dorozumiane pytanie z pytaniem: „Jak zezwolić na duplikowanie NULLwartości podczas używania UNIQUE?”. Lub „Jak zezwolić tylko na jedną UNIQUE NULLwartość?”
Odpowiedź na pytanie została już udzielona, tak, możesz mieć zduplikowane NULLwartości podczas korzystania z UNIQUEindeksu.
Ponieważ natknąłem się na tę odpowiedź, szukając „jak zezwolić na jedną UNIQUE NULLwartość”. Dla każdego, kto może natknąć się na to pytanie, robiąc to samo, reszta mojej odpowiedzi jest dla ciebie ...
W MySQL nie możesz mieć jednej UNIQUE NULLwartości, jednak możesz mieć jedną UNIQUEpustą wartość, wstawiając wartość pustego łańcucha.
Ostrzeżenie: Liczby i typy inne niż łańcuch mogą mieć domyślną wartość 0 lub inną wartość domyślną.
UNIQUEograniczenia, ale z powodu NOT NULLograniczenia. Myślę, że ta odpowiedź nie ma znaczenia dla pytania, ponieważ pytanie dotyczy konkretnie zachowania UNIQUEograniczenia.
Unikaj dopuszczalnych unikalnych ograniczeń. Zawsze możesz umieścić kolumnę w nowej tabeli, ustawić ją na inną niż null i unikalną, a następnie wypełnić tę tabelę tylko wtedy, gdy masz dla niej wartość. Zapewnia to, że dowolna zależność klucza od kolumny może być poprawnie wymuszona i pozwala uniknąć problemów, które mogą być spowodowane przez wartości null.