mySQL中外键必须是索引吗?

发布于 2024-11-13 10:14:52 字数 656 浏览 2 评论 0原文

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

这是我的表格:

users

  1. user_id int Primary auto_increment
  2. username varchar(20)
  3. password varchar(20)

posts

  1. post_id in Primary auto_increment
  2. title varchar(100)
  3. message text
  4. user_id int

当我尝试向引用 posts->user_id 的用户添加外键,我在 mySQL 面板上的选项列表 Relation_view 窗口中看不到 posts->user_id 选项。

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

I've just created my first mySQL table on my own (other than using Joomla, Wordpress, etc.) and I am MS SQL developer for years but normally I can easily create a foreign key in MS SQL but I came across a difficulty or lack of knowledge here.

Here is my tables :

users

  1. user_id int primary auto_increment
  2. username varchar(20)
  3. password varchar(20)

posts

  1. post_id in primary auto_increment
  2. title varchar(100)
  3. message text
  4. user_id int

When I try to add a foreign key to users which refers to posts->user_id, I cannot see the posts->user_id option in the option list Relation_view window on mySQL panel.

I am wondering whether I should define posts->user_id as Index or something? If so, why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你的他你的她 2024-11-20 10:14:52

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

InnoDB 需要外键和引用键上的索引,以便外键检查可以快速且不需要表扫描。

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

Short answer: Yes, MySQL forces you to index foreign key.

InnoDB requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan.

You can read more about foreign keys on MySQL documentation pages: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

潇烟暮雨 2024-11-20 10:14:52

来自 MySQL 参考手册

InnoDB 需要外部索引
键和引用的键,以便
外键检查可以很快,也可以不
需要进行表扫描。在
引用表,必须有一个
外键列所在的索引
被列为第一列
相同的顺序。这样的索引就创建好了
自动在参考表上
如果它不存在。 (这是在
与一些旧版本相比,
必须创建哪些索引
明确或建立外国
关键约束将失败。)
index_name(如果给定)用作
前面已经描述过了。

与 SQL Server 不同,SQL Server 不需要对 FK 建立索引...但是,我看到的建议表明您几乎总是对 FK 建立索引,即使这不是必需的。

From the MySQL Reference Manual:

InnoDB requires indexes on foreign
keys and referenced keys so that
foreign key checks can be fast and not
require a table scan. In the
referencing table, there must be an
index where the foreign key columns
are listed as the first columns in the
same order. Such an index is created
on the referencing table automatically
if it does not exist. (This is in
contrast to some older versions, in
which indexes had to be created
explicitly or the creation of foreign
key constraints would fail.)
index_name, if given, is used as
described previously.

In contrast to SQL Server, which does not require FKs to be indexed... however the recommendations that I've seen suggest that you almost always being indexing your FKs even though it isn't required.

独自唱情﹋歌 2024-11-20 10:14:52

来自文档

InnoDB 需要外部索引
键和引用的键,以便
外键检查可以很快,但不能
需要进行表扫描。在
引用表,必须有一个
外键列所在的索引
被列为第一列
相同的顺序。

From the documentation:

InnoDB requires indexes on foreign
keys and referenced keys so that
foreign key checks can be fast and not
require a table scan. In the
referencing table, there must be an
index where the foreign key columns
are listed as the first columns in the
same order.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文