Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Użyj wielu kolumn jako unikalnego identyfikatora mysql

Tak, MySQL zapewnia taką możliwość.

ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)

Nie wiem, do czego używasz tej tabeli, ale wygląda na to, że ten unikalny klucz może być silnym kandydatem na klucz podstawowy tabeli. Klucz podstawowy jest również automatycznie kluczem unikalnym. Jeśli zdecydujesz się ustawić go jako klucz podstawowy, wykonaj następujące czynności:

ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)

(Jeśli pojawi się komunikat o błędzie, że istnieje już klucz podstawowy, wydaj ALTER TABLE MyTable DROP PRIMARY KEY a następnie powtórz powyższe polecenie.)

Edytuj: W odpowiedzi na komentarz użytkownika

Nie możesz mieć wielu wierszy z identycznymi wartościami innymi niż NULL wartości dla kolumn objętych unikalnym kluczem. Nie możesz więc mieć dwóch wierszy, w których group_id = 0 AND user_id = 5 , na przykład. 0 to wartość. Ale jeśli sprawisz, że jedna lub obie kolumny będą miały wartość null, możesz mieć wiele wierszy, które są identyczne aż do ustawienia NULL s. Możesz więc mieć dwa (lub więcej) wiersze, w których group_id IS NULL AND user_id = 1234 .

Warunek:Powyższe dotyczy obu powszechnie używanych silników pamięci masowej MySQL (MyISAM i InnoDB). MySQL ma silniki pamięci, w których NULL jest uważana za unikalną wartość, ale prawdopodobnie jej nie używasz.

Jeśli ustawisz jedną lub obie kolumny na wartości null, wtedy Twój unikalny klucz nie może być kluczem podstawowym - klucz podstawowy musi znajdować się w kolumnach, które są NOT NULL .

Załóżmy, że ustawiłeś ten klucz jako klucz podstawowy i chcesz teraz zezwolić na NULL w group_id kolumna. Nie wiem jaki typ danych group_id jest w tej chwili; Zakładam, że obecnie jest to INT UNSIGNED NOT NULL , ale będziesz musiał zmodyfikować poniższe, jeśli nie jest to. Nie będziesz już mógł używać tego klucza jako klucza podstawowego. Oto polecenie, które możesz uruchomić, aby wprowadzić żądane zmiany:

ALTER TABLE MyTable
    DROP PRIMARY KEY,
    MODIFY group_id INT UNSIGNED,
    ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql - ponowne wykorzystanie obliczonych wartości

  2. Ogranicz wartość typu danych MySQL do określonego zakresu (najlepiej nie ENUM)

  3. Nieunikalna tabela/alias

  4. REPLACE bez rozróżniania wielkości liter w MySQL?

  5. FORCE INDEX w MySQL - gdzie go umieścić?