Что означает ключевое слово KEY?


147

В этом определении таблицы 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)
);

Что означает KEYключевое слово? Это не первичный ключ, это не внешний ключ, так что это просто индекс? Если да, то что же такого особенного в этом типе индекса, созданного с помощью KEY?


1
Похоже, что оператор «KEY» больше не используется в MySQL Server 5.5. Не уверен, когда он был удален, но проблема, с которой я столкнулся, присутствует в 5.1, но не в 5.5.
slant

Ответы:


195

Цитата из http://dev.mysql.com/doc/refman/5.1/en/create-table.html

{INDEX|KEY}

Так KEYэто INDEX;)


10
Обозначение {INDEX | KEY} в целом не означает, что INDEX и KEY имеют одно и то же значение или KEY является INDEX;)
sergtk 04

1
@sergtk: Согласно обозначениям в руководстве по MySQL, FOO | BAR означает, что можно использовать либо ключевое слово FOO, либо ключевое слово BAR. То есть это синонимы.
dotancohen 06

4
В яблочко! В руководстве MySql поясняется, что INDEX и KEY являются синонимами, поэтому я проголосовал за ответ. Но из ответа можно сделать вывод, что BNF Notation {|} описывает синонимы всегда, а не только в этом случае.
sergtk 06

4
Это не так. Я нашел лучший ответ в Quora (см. Пользователя Kristian Kohntopp) quora.com/… : KEY - это ограничение, INDEX - это структура данных, необходимая для реализации этого ограничения. На практике, например, если у вас есть FK, KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id)вы можете дополнительно указать, какой ИНДЕКС используется (HASH против BTREE). Этот пример показывает, что KEY и INDEX не являются синонимами.

4
Никто так и не объяснил, что это за ключевое слово, устарело оно или нет. Если у меня есть первичный ключ, зачем тогда еще и «ключ»? в чем смысл двух индексов? пожалуйста, просветите меня, я ничего не могу найти по этому поводу
Barbz_YHOOL

37

KEYобычно является синонимом INDEX. Ключевой атрибут PRIMARY KEYтакже может быть указан в том виде, в котором он KEYуказан в определении столбца. Это было реализовано для совместимости с другими системами баз данных.

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

Ссылка: http://dev.mysql.com/doc/refman/5.1/en/create-table.html

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.