¿Qué significa la palabra clave KEY?

141

En esta definición de tabla 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)
);

¿Qué significa la KEYpalabra clave? No es una clave primaria, no es una clave externa, entonces, ¿es solo un índice? Si es así, ¿qué tiene de especial este tipo de índice creado con KEY?

w5m
fuente
1
Parece que el operador "CLAVE" ya no está en uso en MySQL Server 5.5. No estoy seguro de cuándo se eliminó, pero un problema que tengo con él está presente en 5.1, pero no en 5.5.
inclinación

Respuestas:

190

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

{INDEX|KEY}

Entonces KEYes un INDEX;)

MartinodF
fuente
9
La notación {INDEX | KEY} en general no significa que INDEX y KEY tengan el mismo significado, o KEY es un ÍNDICE;)
sergtk
1
@sergtk: Según la notación en el manual de MySQL, FOO | BAR significa que se puede usar la palabra clave FOO o la palabra clave BAR. Id est, son sinónimos.
dotancohen
44
¡Exactamente! El manual de MySql aclara que INDEX y KEY son sinónimos, por eso voté por la respuesta. Pero se puede concluir de la respuesta que la notación BNF {|} siempre describió sinónimos, no solo en este caso.
sergtk
3
Esto no es correcto. Encontré la mejor respuesta en Quora (ver usuario Kristian Kohntopp) quora.com/… : KEY es una restricción, INDEX es la estructura de datos necesaria para implementar esa restricción. En la práctica, si tiene un FK, por ejemplo KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id), es posible que también desee especificar qué ÍNDICE se utiliza (HASH vs BTREE). Este ejemplo muestra que KEY e INDEX no son sinónimos.
oneloop
44
Nadie explicó nunca cuál es el uso de esa palabra clave, si es obsoleta o no. Si tengo una clave principal, ¿por qué tener una "clave" también? ¿Cuál es el punto de dos índices? por
favor
36

KEYnormalmente es sinónimo de INDEX. El atributo clave PRIMARY KEYtambién se puede especificar solo KEYcuando se proporciona en una definición de columna. Esto se implementó por compatibilidad con otros sistemas de bases de datos.

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
fuente