"KEY"关键字是什么意思?

187
在这个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 创建的这种类型的索引有什么特别之处?


2
似乎MySQL Server 5.5不再使用“KEY”操作符。不确定何时被移除,但我在5.1上遇到的问题,在5.5上不存在。 - slant
1
请参见https://dev59.com/O3M_5IYBdhLWcg3wZSE6。 - Yves M.
2个回答

226

引用自create-table - 索引和键

{INDEX|KEY}

所以KEY通常是指一个INDEX

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


13
一般而言,符号{INDEX|KEY}并不意味着INDEX和KEY具有相同的含义,或者KEY就是INDEX。 - sergtk
1
根据MySQL手册中的表示法,FOO|BAR表示可以使用关键字FOO或关键字BAR。也就是说,它们是同义词。 - dotancohen
5
没错!MySql手册明确指出INDEX和KEY是同义词 - 这就是为什么我点赞这个答案的原因。但从答案中可以得出结论,BNF符号{|}总是描述同义词,而不仅仅是在这种情况下。 - sergtk
5
这不是正确的。我在 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 不是同义词。 - user1950164
9
没有人解释过这个关键字的用途,也不知道它是否已经过时。如果我已经有了一个主键,为什么还需要一个“键”呢?两个索引有什么意义?请给我解释一下,我找不到有关这个问题的信息。 - Barbz_YHOOL
显示剩余6条评论

39

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接