Was bedeutet das Schlüsselwort KEY?

141

In dieser MySQL-Tabellendefinition:

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)
);

Was bedeutet das KEYSchlüsselwort? Es ist kein Primärschlüssel, es ist kein Fremdschlüssel, also ist es nur ein Index? Wenn ja, was ist das Besondere an dieser Art von Index, mit dem erstellt wurde KEY?

w5m
quelle
1
Es scheint, als ob der Operator "KEY" in MySQL Server 5.5 nicht mehr verwendet wird. Ich bin nicht sicher, wann es entfernt wurde, aber ein Problem, das ich damit habe, ist in 5.1 vorhanden, aber nicht in 5.5.
Schräge

Antworten:

190

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

{INDEX|KEY}

So KEYist ein INDEX;)

MartinodF
quelle
9
Notation {INDEX | KEY} bedeutet im Allgemeinen nicht, dass INDEX und KEY die gleiche Bedeutung haben, oder KEY ist ein INDEX;)
sergtk
1
@sergtk: Gemäß der Notation im MySQL-Handbuch bedeutet FOO | BAR, dass entweder das Schlüsselwort FOO oder das Schlüsselwort BAR verwendet werden kann. Id est, sie sind Synonyme.
Dotancohen
4
Genau! Das MySQL-Handbuch stellt klar, dass INDEX und KEY Synonyme sind - deshalb habe ich die Antwort positiv bewertet. Aus der Antwort kann jedoch geschlossen werden, dass BNF Notation {|} Synonyme immer beschrieb, nicht nur in diesem Fall.
Sergtk
3
Das ist nicht richtig. Ich habe die beste Antwort in Quora gefunden (siehe Benutzer Kristian Kohntopp). Quora.com/… : KEY ist eine Einschränkung, INDEX ist die Datenstruktur, die zur Implementierung dieser Einschränkung erforderlich ist. Wenn Sie beispielsweise eine FK haben, KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id)möchten Sie in der Praxis möglicherweise zusätzlich angeben, welcher INDEX verwendet wird (HASH vs BTREE). Dieses Beispiel zeigt, dass KEY und INDEX keine Synonyme sind.
Oneloop
3
Niemand hat jemals erklärt, wozu dieses Schlüsselwort verwendet wird, ob es veraltet ist oder nicht. Wenn ich einen Primärschlüssel habe, warum dann auch einen "Schlüssel"? Was ist der Sinn von zwei Indizes? Bitte klären Sie mich auf, ich kann nichts darüber finden
Barbz_YHOOL
36

KEYist normalerweise ein Synonym für INDEX. Das Schlüsselattribut PRIMARY KEYkann auch so angegeben werden, wie KEYes in einer Spaltendefinition angegeben ist. Dies wurde aus Gründen der Kompatibilität mit anderen Datenbanksystemen implementiert.

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
quelle