KEY关键字的含义是什么?

133 mysql indexing

在这个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)
);
Run Code Online (Sandbox Code Playgroud)

什么是KEY关键字是什么意思?它不是主键,它不是外键,它只是一个索引吗?如果是这样,这种类型的索引有KEY什么特别之处?

Mar*_*odF 181

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

{INDEX|KEY}
Run Code Online (Sandbox Code Playgroud)

所以KEY是一个INDEX;)

  • 符号{INDEX | KEY}一般不表示INDEX和KEY具有相同的含义,或者KEY是INDEX;) (8认同)
  • 没有人解释过该关键字的用途是什么,无论它是否已过时。如果我有主键,那为什么还要有“键”呢?两个索引有什么意义?请启发我,我找不到任何关于此的信息 (7认同)
  • 究竟!MySql手册澄清了INDEX和KEY是同义词 - 这就是我赞成答案的原因.但是从答案可以得出结论,BNF Notation {|}总是描述同义词,不仅仅是在这种情况下. (4认同)
  • 这是不正确的.我在Quora找到了最好的答案(见用户Kristian Kohntopp)https://www.quora.com/What-is-the-difference-between-using-KEY-and-INDEX-in-MySQL:KEY是一个约束, INDEX是实现该约束所必需的数据结构.实际上,如果你有一个FK例如`KEY key_name(user_id),CONSTRAINT foreign_key_constraint_name FOREIGN KEY(user_id)REFERENCES auth_user(id)`那么你可能还想指定使用什么INDEX(HASH vs BTREE).此示例显示KEY和INDEX不是同义词. (2认同)

ser*_*gtk 35

KEY通常是INDEX的同义词.当在列定义中给出时,键属性PRIMARY KEY也可以被指定为KEY.这是为了与其他数据库系统兼容而实现的.

column_definition:
      data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      ...
Run Code Online (Sandbox Code Playgroud)

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