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?

0
arjunurs 23 luty 2012, 23:22

3 odpowiedzi

Najlepsza odpowiedź

Możesz ustawić NOT NULL na col3 i ustawić domyślną wartość na ''.

1
kitti 23 luty 2012, 23:24

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.

1
northpole 23 luty 2012, 23:25

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.

0
Joachim Isaksson 23 luty 2012, 23:30