mysql - 在 phpMyAdmin 中设置外键?

我正在使用 phpMyAdmin 设置数据库。我有两个表(foobar),索引在它们的主键上。我正在尝试在它们之间创建一个关系表(foo_bar),使用它们的主键作为外键。

我将这些表创建为 MyISAM,但后来将这三个表都更改为 InnoDB,因为我读到 MyISAM 不支持外键。所有 id 字段都是 INT(11)

当我选择 foo_bar 表时,点击“关系 View ”链接,并尝试将 FK 列设置为 database.foo.id database.bar.id,它在每列旁边显示“未定义索引!”

我错过了什么?

澄清/更新

为了简单起见,我想继续使用 phpMyAdmin。我目前正在使用 XAMPP,它很容易让我专注于 PHP/CSS/Javascript,它带有 phpMyAdmin。

此外,虽然我还不能设置显式外键,但我确实有一个关系表并且可以执行如下连接:

SELECT * 
FROM foo 
INNER JOIN foo_bar 
ON foo.id = foo_bar.foo_id 
INNER JOIN bar
ON foo_bar.bar_id = bar.id;

没有在数据库中明确定义 FK 让我感到不舒服。

最佳答案

如果你想使用 phpMyAdmin 建立关系,你必须做两件事。首先,您必须在引用表中的外键列上定义一个索引(在您的情况下是 foo_bar.foo_id)。然后,转到关系 View (在引用表中)并选择引用列(在您的情况下为 foo.id)以及更新和删除操作。

如果您有多个相互链接的表,我认为外键很有用,特别是如果您正确设置引用选项,您的删除脚本将变得非常短。

编辑:确保两个表都选择了 InnoDB 引擎。

https://stackoverflow.com/questions/459312/

相关文章:

mysql - 奇怪的 MySQL 弹出窗口 "Mysql Installer is running

mysql - 在 MySQL 中的特定列之后添加多个列

mysql - 全文搜索引擎对比——Lucene、Sphinx、Postgresql、MySQL?

MySQL - 强制不使用缓存来测试查询速度

mysql - 在一个命令中截断 MySQL 数据库中的所有表?

mysql - 我应该为 Node.js 和 MySQL 使用哪个 ORM?

mysql - 如何使用命令提示符导出 mysql 数据库?

mysql - 字符集和排序规则到底是什么意思?

mysql - 获取 MySQL 数据库中所有表的记录数

sql - 测试 MySQL 表中是否存在行的最佳方法