Que signifie le mot clé KEY?

141

Dans cette définition de table 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)
);

Que signifie le KEYmot - clé? Ce n'est pas une clé primaire, ce n'est pas une clé étrangère, alors est-ce juste un index? Dans l'affirmative, quelle est la particularité de ce type d'index créé avec KEY?

w5m
la source
1
Il semble que l'opérateur "KEY" n'est plus utilisé dans MySQL Server 5.5. Je ne sais pas quand il a été supprimé, mais un problème que je rencontre avec celui-ci est présent sur 5.1, mais pas sur 5.5.
oblique

Réponses:

190

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

{INDEX|KEY}

Ainsi KEYest un INDEX;)

MartinodF
la source
9
Notation {INDEX | KEY} en général ne signifie pas que INDEX et KEY ont la même signification, ou KEY est un INDEX;)
sergtk
1
@sergtk: Selon la notation du manuel MySQL, FOO | BAR signifie que le mot-clé FOO ou le mot-clé BAR peut être utilisé. Id est, ce sont des synonymes.
dotancohen
4
Exactement! Le manuel MySql précise que INDEX et KEY sont des synonymes - c'est pourquoi j'ai voté pour la réponse. Mais on peut conclure de la réponse que BNF Notation {|} a toujours décrit les synonymes, pas seulement dans ce cas.
sergtk
3
Ce n'est pas correct. J'ai trouvé la meilleure réponse dans Quora (voir l'utilisateur Kristian Kohntopp) quora.com / ... : KEY est une contrainte, INDEX est la structure de données nécessaire pour implémenter cette contrainte. En pratique, si vous avez un FK par exemple, KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id)vous pouvez également spécifier quel INDEX est utilisé (HASH vs BTREE). Cet exemple montre que KEY et INDEX ne sont pas des synonymes.
oneloop
4
Personne n'a jamais expliqué à quoi sert ce mot-clé, s'il est obsolète ou non. Si j'ai une clé primaire, pourquoi avoir une «clé» aussi? à quoi servent deux index? plz enlighten me je ne trouve rien à ce sujet
Barbz_YHOOL
36

KEYest normalement synonyme de INDEX. L'attribut key PRIMARY KEYpeut également être spécifié comme juste KEYlorsqu'il est donné dans une définition de colonne. Cela a été mis en œuvre pour la compatibilité avec d'autres systèmes de base de données.

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

Réf: http://dev.mysql.com/doc/refman/5.1/en/create-table.html

sergtk
la source