外键必须是mySQL中的索引?

时间:2011-06-03 17:34:27

标签: mysql sql foreign-keys indexing

我刚刚创建了我自己的第一个mySQL表(除了使用Joomla,Wordpress等)并且我是MS SQL开发人员多年,但通常我可以在MS SQL中轻松创建外键但我遇到了这里有困难或缺乏知识。

这是我的表格:

用户

  1. user_id int primary auto_increment
  2. 用户名varchar(20)
  3. 密码varchar(20)
  4. 帖子

    1. 主要auto_increment中的post_id
    2. title varchar(100)
    3. 消息文字
    4. user_id int
    5. 当我尝试向引用posts->user_id的用户添加外键时,我在mySQL面板的选项列表Relation_view窗口中看不到posts->user_id选项。

      我想知道我是否应该将posts->user_id定义为Index或其他什么?如果是这样,为什么?

3 个答案:

答案 0 :(得分:17)

简短回答:是的,MySQL会强制您索引外键。

  

InnoDB需要外键和引用键的索引,以便外键检查速度快,不需要进行表扫描。

您可以在MySQL文档页面上阅读有关外键的更多信息:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

答案 1 :(得分:4)

来自MySQL Reference Manual

  

InnoDB需要外国索引   键和引用键,以便   外键检查可以快速而不是   需要进行表扫描。在里面   引用表,必须有一个   索引所在的外键列   被列为第一列   同样的顺序。创建了这样的索引   在引用表上自动   如果它不存在。 (这是在   与一些旧版本形成鲜明对比   必须创建哪些索引   明确地或创造外国的   关键约束会失败。)   index_name,如果给定,则用作   如前所述。

与SQL Server不同,SQL Server不需要对FK进行索引......但是我看到的建议表明,即使不是必需的,您也几乎总是将FK编入索引。

答案 2 :(得分:2)

来自the documentation

  

InnoDB需要外国索引   键和引用键,以便   外键检查可以快速而不是   需要进行表扫描。在里面   引用表,必须有一个   索引所在的外键列   被列为第一列   同样的顺序。