Che cosa significa la parola chiave KEY?


141

In questa definizione di tabella 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)
);

Cosa significa la KEYparola chiave? Non è una chiave primaria, non è una chiave esterna, quindi è solo un indice? In tal caso, cosa rende così speciale questo tipo di indice creato con KEY?


1
Sembra che l'operatore "KEY" non sia più utilizzato in MySQL Server 5.5. Non sono sicuro di quando è stato rimosso, ma un problema che sto riscontrando è presente su 5.1, ma non su 5.5.
inclinazione

Risposte:


190

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

{INDEX|KEY}

Quindi KEYè un INDEX;)


9
Notazione {INDICE | CHIAVE} in generale non significa che INDICE e CHIAVE hanno lo stesso significato, o CHIAVE è un INDICE;)
sergtk

1
@sergtk: Secondo la notazione nel manuale di MySQL, FOO | BAR significa che è possibile utilizzare la parola chiave FOO o la parola chiave BAR. Id est, sono sinonimi.
dotancohen,

4
Esattamente! Il manuale di MySql chiarisce che INDICE e KEY sono sinonimi: è per questo che ho votato a favore della risposta. Ma si può concludere dalla risposta che la Notazione BNF {|} ha sempre descritto i sinonimi, non solo in questo caso.
sergtk,

3
Questo non è corretto Ho trovato la risposta migliore in Quora (vedi l'utente Kristian Kohntopp) quora.com/… : KEY è un vincolo, INDEX è la struttura di dati necessaria per implementare quel vincolo. In pratica, se si dispone di un FK, ad esempio, KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id)è possibile che si desideri specificare quale INDICE viene utilizzato (HASH vs BTREE). Questo esempio mostra KEY e INDEX non sono sinonimi.
oneloop

4
Nessuno ha mai spiegato a che serve quella parola chiave, se è obsoleta o no. Se ho una chiave primaria, allora perché anche una "chiave"? qual è il punto di due indici? per favore illuminami Non riesco a trovare nulla al riguardo
Barbz_YHOOL,

36

KEYè normalmente sinonimo di INDEX. L'attributo chiave PRIMARY KEYpuò anche essere specificato come appena KEYdato in una definizione di colonna. Questo è stato implementato per la compatibilità con altri sistemi di database.

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.