Mam tabelę MySQL z 4 kolumnami
Column Type Null Default
----------------------------------
id int(11) No None AUTO_INCREMENT
col1 int(11) No None
col2 int(11) No None
col3 varchar(20) Yes Null
Utworzyłem indeks za pomocą col1, col2, col3, ponieważ nie chcę zduplikowanych wierszy. Rozumiem, że wartość NULL jest uważana za odrębną, więc tabela akceptuje zduplikowane wiersze.
Jaka jest najlepsza alternatywa, abym mógł mieć wiersze z unikalnymi wartościami dla col1, col2, col3?
3 odpowiedzi
Możesz ustawić NOT NULL
na col3
i ustawić domyślną wartość na ''
.
Sposób, w jaki nauczono mnie rozumieć NULL, jest taki, że NULL jest stanem, a nie wartością. Więc tak naprawdę nie masz odrębnej wartości z NULL. Właściwie rozważyłbym użycie pustego ciągu zamiast NULL lub ustawienie innej wartości domyślnej.
Jeśli chcesz, aby baza danych wymuszała to, nie ma zbyt wielu opcji. Ponieważ nie możesz zmusić bazy danych do uwzględniania czegokolwiek poza wartościami odrębnymi, możesz albo;
- Użyj pustego ciągu w kolumnie zamiast NULL. Spowoduje to problemy tylko wtedy, gdy „” jest prawidłową wartością i chcesz, aby różniła się od rzeczywistej wartości NULL.
- Użyj pustego ciągu w kolumnie zamiast NULL i dodaj kolumnę logiczną, która wskazuje wartość NULL. Dodaj to również do unikalnego indeksu, a baza danych oddzieli „fałszywe NULL” od pustych ciągów.
Obie opcje będą wymagały ustawienia col3 na NOT NULL i wykonania mapowania wartości przy wstawianiu/wybieraniu.
Podobne pytania
Nowe pytania
mysql
MySQL to darmowy system zarządzania relacyjnymi bazami danych (RDBMS) o otwartym kodzie źródłowym, który wykorzystuje język SQL (Structured Query Language). NIE UŻYWAJ tego znacznika dla innych baz danych, takich jak SQL Server, SQLite itp. Są to różne bazy danych, które używają własnych dialektów SQL do zarządzania danymi.