【问题标题】:What does the KEY keyword mean?KEY 关键字是什么意思?
【发布时间】:2010-10-29 18:49:19
【问题描述】:

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

【问题讨论】:

  • 在 MySQL Server 5.5 中似乎不再使用“KEY”运算符。不确定它何时被删除,但我遇到的一个问题出现在 5.1 上,但不是 5.5。

标签: mysql indexing


【解决方案1】:

引用create-table - indexes andkeys

{INDEX|KEY}

所以KEY 通常是INDEX

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

【讨论】:

  • 注解{INDEX|KEY}一般不代表INDEX和KEY意思相同,或者KEY是一个INDEX ;)
  • @sergtk:根据 MySQL 手册中的符号,FOO|BAR 意味着可以使用关键字 FOO 或关键字 BAR。 Id est,它们是同义词。
  • 没错! MySql 手册阐明了 INDEX 和 KEY 是同义词——这就是我赞成这个答案的原因。但从答案中可以得出结论,BNF Notation {|} 总是描述同义词,不仅在这种情况下。
  • 这是不正确的。我在 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),那么您可能还需要指定使用什么 INDEX(HASH 与 BTREE)。此示例显示 KEY 和 INDEX 不是同义词。
  • 没有人解释过该关键字的用途,无论它是否已过时。如果我有一个主键,那为什么还要有一个“键”呢?两个索引有什么意义?请赐教,我找不到任何关于此的信息
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 2011-10-28
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多