Jaka jest różnica między MUL
, PRI
a UNI
w MySQL?
Pracuję nad zapytaniem MySQL, używając polecenia:
desc mytable;
Jedno z pól jest pokazane jako MUL
klucz, inne pojawiają się jako UNI
lub PRI
.
Wiem, że jeśli klucz jest PRI
, tylko jeden rekord na tabelę może być powiązany z tym kluczem. Jeśli klucz jest MUL
, czy to oznacza, że może istnieć więcej niż jeden powiązany rekord?
Oto odpowiedź mytable
.
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| courseid | int(11) | YES | MUL | NULL | |
| dept | char(3) | YES | | NULL | |
| coursenum | char(4) | YES | | NULL | |
+-----------+---------+------+-----+---------+-------+
MUL
pokazuje się tylko w tej kolumnie, a nie we wszystkich innych kolumnach?Jest to skrót do:
W każdym razie istnieją trzy możliwe wartości atrybutu „Klucz”:
PRI
UNI
MUL
Znaczenie
PRI
iUNI
są dość jasne:PRI
=> klucz podstawowyUNI
=> unikalny kluczTrzecia możliwość,
MUL
(o którą pytałeś) to w zasadzie indeks, który nie jest ani kluczem podstawowym, ani kluczem unikalnym. Nazwa pochodzi od „wielokrotnego”, ponieważ dozwolone jest wiele wystąpień o tej samej wartości. Prosto z dokumentacji MySQL :Istnieje również ostatnie zastrzeżenie:
Ogólnie rzecz biorąc, dokumentacja MySQL jest całkiem dobra. W razie wątpliwości sprawdź to!
źródło
MUL
.Zastanawiasz się, co to jest MUL, PRI i UNI w MySQL?
Z dokumentacji MySQL 5.7 :
Przykłady na żywo
Grupa kontrolna, w tym przykładzie nie ma ani PRI, MUL ani UNI:
Tabela z jedną kolumną i indeksem w jednej kolumnie ma MUL:
Tabela z kolumną, która jest kluczem podstawowym, ma PRI
Tabela z kolumną, która jest unikalnym kluczem, ma UNI:
Tabela z indeksem obejmującym foo i pasek ma MUL tylko na foo:
Tabela z dwoma oddzielnymi indeksami w dwóch kolumnach ma MUL dla każdej z nich
Tabela z indeksem obejmującym trzy kolumny ma MUL na pierwszej:
Tabela z kluczem obcym, który odwołuje się do klucza podstawowego innej tabeli, to MUL
Trzymaj to w korze nowej i ustaw pokrętło na „frappe”.
źródło
Dla Mul była to dla mnie także pomocna dokumentacja - http://grokbase.com/t/mysql/mysql/9987k2ew41/key-field-mul-newbie-question
„MUL oznacza, że klucz pozwala wielu wierszom mieć tę samą wartość. Oznacza to, że nie jest to unikalny klucz.”
Załóżmy na przykład, że masz dwa modele: Publikuj i Komentuj. Wpis ma związek z komentarzem. Sensowne byłoby wówczas, aby tabela komentarzy zawierała klucz MUL (identyfikator posta), ponieważ wiele komentarzy można przypisać do tego samego postu.
źródło