Mysql中的默认密钥约束是什么,或者;“关键”;你一个人做什么?

Mysql中的默认密钥约束是什么,或者;“关键”;你一个人做什么?,mysql,sql,Mysql,Sql,我创建了具有如下内容的表查询: create table table_name( id int auto_increment, ... KEY fk_some_name (some_column_name) ) 这把“钥匙”是干什么用的?我想写这封信的人不知道他在干什么。他给它取了个名字。我想他想创建一个外键。我搜索了一段时间,但没有找到单独使用的Key关键字的用法。根据,Key是索引的同义词。因此,这会在一列上创建一个名为“fk_some_name”的索引。在本例中,它只

我创建了具有如下内容的表查询:

  create table table_name(
  id int auto_increment,
  ...
  KEY fk_some_name (some_column_name)
  )

这把“钥匙”是干什么用的?我想写这封信的人不知道他在干什么。他给它取了个名字。我想他想创建一个外键。我搜索了一段时间,但没有找到单独使用的Key关键字的用法。

根据,
Key
索引的同义词。因此,这会在一列上创建一个名为“fk_some_name”的索引。

在本例中,它只是一个名为
fk_some_name
的索引

许多站点不喜欢使用真正的外键约束,但它们可能仍然需要列上的索引来帮助优化针对该列的连接。这可能是一种命名约定,用于连接的索引使用
fk
前缀命名

同样在MySQL中,如果您为已经有索引的列定义外键约束,它将使用该索引,而不是创建冗余的新索引

在某些上下文中,
KEY
INDEX
在MySQL中是同义词

您可以这样做:

CREATE TABLE ... ( ... {INDEX|KEY} name (some_column_name) )
ALTER TABLE ... ADD {INDEX|KEY} name (some_column_name)
您可以这样做:

CREATE TABLE ... ( ... {INDEX|KEY} name (some_column_name) )
ALTER TABLE ... ADD {INDEX|KEY} name (some_column_name)
在某些其他情况下,您不能互换使用它们:

仅使用键,不使用索引:

CREATE TABLE ... ( ... FOREIGN KEY name (col) REFERENCES ... )
仅使用索引,不使用键:

CREATE INDEX name ON tablename (column_name)

如果有疑问,请阅读参考文档。

我明白了,我想它是一个非聚集非唯一索引。对。顺便说一句,MySQL没有让您选择聚集索引的选项。聚集索引始终是主键,如果没有主键,则它是第一个非空的唯一键。