Co oznacza słowo kluczowe KEY?

141

W tej definicji tabeli MySQL:

CREATE TABLE groups (
  ug_main_grp_id smallint NOT NULL default '0',
  ug_uid smallint  default NULL,
  ug_grp_id smallint  default NULL,
  KEY (ug_main_grp_id)
);

Co oznacza KEYsłowo kluczowe? To nie jest klucz podstawowy, nie jest to klucz obcy, więc czy to tylko indeks? Jeśli tak, co jest takiego specjalnego w tego typu indeksach tworzonych za pomocą KEY?

w5m
źródło
1
Wygląda na to, że operator „KEY” nie jest już używany w MySQL Server 5.5. Nie jestem pewien, kiedy został usunięty, ale problem, który mam z nim, jest obecny w wersji 5.1, ale nie w wersji 5.5.
skośny

Odpowiedzi:

190

Cytując z http://dev.mysql.com/doc/refman/5.1/en/create-table.html

{INDEX|KEY}

Więc KEYjest INDEX;)

MartinodF
źródło
9
Notacja {INDEX | KEY} generalnie nie oznacza, że ​​INDEX i KEY mają to samo znaczenie, lub KEY to INDEX;)
sergtk
1
@sergtk: Zgodnie z notacją w podręczniku MySQL, FOO | BAR oznacza, że ​​można użyć słowa kluczowego FOO lub BAR. To znaczy, że są synonimami.
dotancohen,
4
Dokładnie! Podręcznik MySql wyjaśnia, że ​​INDEX i KEY to synonimy - dlatego głosowałem za odpowiedzią. Ale z odpowiedzi można wywnioskować, że BNF Notation {|} opisywał synonimy zawsze, nie tylko w tym przypadku.
sergtk
3
To nie jest poprawne. Najlepszą odpowiedź znalazłem w Quora (patrz użytkownik Kristian Kohntopp) quora.com/… : KEY to ograniczenie, INDEX to struktura danych niezbędna do zaimplementowania tego ograniczenia. W praktyce, jeśli masz na przykład FK, KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id)możesz dodatkowo określić, jaki INDEKS jest używany (HASH vs BTREE). Ten przykład pokazuje, że KEY i INDEX nie są synonimami.
oneloop
4
Nikt nigdy nie wyjaśnił, do czego służy to słowo kluczowe, czy jest przestarzałe, czy nie. Jeśli mam klucz podstawowy, po co mam też „klucz”? jaki jest sens dwóch indeksów? plz enlighten me Nie mogę znaleźć nic na ten temat
Barbz_YHOOL
36

KEYjest zwykle synonimem INDEX. Atrybut klucza PRIMARY KEYmożna również określić tak samo, jak w KEYprzypadku podania w definicji kolumny. Zostało to zaimplementowane w celu zapewnienia zgodności z innymi systemami baz danych.

column_definition:
      data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      ...

Ref: http://dev.mysql.com/doc/refman/5.1/en/create-table.html

sergtk
źródło