O que significa a palavra-chave KEY?

141

Nesta definição de tabela do 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)
);

O que significa a KEYpalavra - chave? Não é uma chave primária, não é uma chave estrangeira, então é apenas um índice? Em caso afirmativo, o que há de tão especial nesse tipo de índice criado KEY?

w5m
fonte
1
Parece que o operador "KEY" não está mais em uso no MySQL Server 5.5. Não tenho certeza de quando foi removido, mas um problema que estou tendo com ele está presente no 5.1, mas não no 5.5.
inclinada

Respostas:

190

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

{INDEX|KEY}

Então KEYé um INDEX;)

MartinodF
fonte
9
Notação {INDEX | CHAVE}, em geral, não significa que o índice e chave têm o mesmo significado, ou KEY é um índice;)
sergtk
1
@ergtk: Conforme a notação no manual do MySQL, FOO | BAR significa que a palavra-chave FOO ou a palavra-chave BAR podem ser usadas. Id est, eles são sinônimos.
dotancohen
4
Exatamente! O manual do MySql esclarece que INDEX e KEY são sinônimos - é por isso que eu votei na resposta. Mas pode-se concluir a partir da resposta que a Notação BNF {|} descreveu sinônimos sempre, não apenas neste caso.
sergtk
3
Isso não está correto. Encontrei a melhor resposta no Quora (consulte o usuário Kristian Kohntopp) quora.com/… : KEY é uma restrição, INDEX é a estrutura de dados necessária para implementar essa restrição. Na prática, se você tiver um FK, por exemplo KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id), poderá especificar adicionalmente qual INDEX é usado (HASH vs BTREE). Este exemplo mostra que KEY e INDEX não são sinônimos.
oneloop 31/01
4
Ninguém nunca explicou qual é o uso dessa palavra-chave, se é obsoleta ou não. Se eu tenho uma chave primária, por que também tem uma "chave"? qual é o objetivo de dois índices? plz me esclarecer Não consigo encontrar nada sobre isso #
Barbz_YHOOL
36

KEYnormalmente é sinônimo de INDEX. O atributo-chave PRIMARY KEYtambém pode ser especificado exatamente KEYquando fornecido em uma definição de coluna. Isso foi implementado para compatibilidade com outros sistemas de banco de dados.

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
fonte