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 NULL
mnie 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 NULL
wartości podczas używania UNIQUE
?”. Lub „Jak zezwolić tylko na jedną UNIQUE
NULL
wartość?”
Odpowiedź na pytanie została już udzielona, tak, możesz mieć zduplikowane NULL
wartości podczas korzystania z UNIQUE
indeksu.
Ponieważ natknąłem się na tę odpowiedź, szukając „jak zezwolić na jedną UNIQUE
NULL
wartość”. 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
NULL
wartości, jednak możesz mieć jedną UNIQUE
pustą 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ą.
UNIQUE
ograniczenia, ale z powodu NOT NULL
ograniczenia. Myślę, że ta odpowiedź nie ma znaczenia dla pytania, ponieważ pytanie dotyczy konkretnie zachowania UNIQUE
ograniczenia.
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.