Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
外键必须是mySQL中的索引?_Mysql_Sql_Foreign Keys_Indexing - Fatal编程技术网

外键必须是mySQL中的索引?

外键必须是mySQL中的索引?,mysql,sql,foreign-keys,indexing,Mysql,Sql,Foreign Keys,Indexing,我刚刚自己创建了我的第一个mySQL表(除了使用Joomla、Wordpress等),我是MS SQL开发人员多年,但通常我可以轻松地在MS SQL中创建外键,但我在这里遇到了困难或缺乏知识 这是我的桌子: 用户 用户id int主自动增量 用户名varchar(20) 密码varchar(20) 帖子 主自动增量中的post_id 标题varchar(100) 消息文本 用户id int 当我尝试向用户添加一个外键,该外键指的是posts->user\u id,我在mySQL面板的选项列表关系

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

这是我的桌子:

用户

  • 用户id int主自动增量
  • 用户名varchar(20)
  • 密码varchar(20)
  • 帖子

  • 主自动增量中的post_id
  • 标题varchar(100)
  • 消息文本
  • 用户id int
  • 当我尝试向用户添加一个外键,该外键指的是
    posts->user\u id
    ,我在mySQL面板的选项列表关系视图窗口中看不到
    posts->user\u id
    选项


    我想知道我是否应该将
    posts->user\u id
    定义为
    Index
    还是什么?如果是,原因是什么?

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

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

    您可以在MySQL文档页面上阅读有关外键的更多信息:

    来自:

    InnoDB需要外部数据库上的索引 键和引用的键,以便 外键检查可以是快速的,而不是快速的 需要表格扫描。在 引用表时,必须有一个 外键列所在的索引 列为列表中的第一列 同样的顺序

    从:

    InnoDB需要外部数据库上的索引 键和引用的键,以便 外键检查可以是快速的,而不是快速的 需要表格扫描。在 引用表时,必须有一个 外键列所在的索引 列为列表中的第一列 同样的顺序。这样就创建了一个索引 在引用表上自动 如果它不存在。(这是在 与一些旧版本相比,在 必须创建哪些索引 明确地说,还是创造了外国文化 关键约束将失败。) 索引_名称(如果给定)用作 如前所述


    与SQL Server不同,SQL Server不要求为FKs编制索引。。。然而,我看到的建议表明,您几乎总是在为FK编制索引,即使它不是必需的。

    索引对外键定义没有影响——很可能是您使用的UI中的一个错误。你用什么软件来做这件事?我用phpMyAdmin来导航和编辑我的数据库..在我宣布它们为索引后,我开始在列表中看到它们。你刚刚给出了公平的答案。非常感谢。