无法使用 phpMyAdmin 在关系视图中设置关系

Posted

技术标签:

【中文标题】无法使用 phpMyAdmin 在关系视图中设置关系【英文标题】:Cannot set relations in relation view with phpMyAdmin 【发布时间】:2017-05-08 07:38:02 【问题描述】:

我将我的表设置为 InnoDB 并且可以进入关系视图。但我只能添加约束没有关系。是什么原因造成的?

服务器版本:5.7.14 - mysql 社区服务器 (GPL)

phpMyAdmin 版本:4.6.4

WampServer 版本:3.0.6

这是我期望视图的图片,缺少“内部关系”表:

【问题讨论】:

【参考方案1】:

问:“我只能添加约束没有关系。是什么原因造成的?”

答:我没有看到任何有问题的行为被报告。

我看到了您已采取的步骤的说明,我猜这些步骤的结果不符合您的期望。

如果您能说明您的期望,我们或许可以提供帮助。


简单地说...

使用 InnoDB,可以通过创建 FOREIGN KEY 约束来表达和执行两个表之间的“关系”。


在关系数据库理论中,“关系”是一组元组。在 RDBMS 中,“关系”被实现为TABLE


如果对您想要达到的目标进行了描述,并且对您观察到的问题行为进行了更准确的描述,则可以提供一些帮助。


编辑

使用 InnoDB,我们可以使用数据库中定义的外键来表示表之间的关系。这些存储在 InnoDB 表定义中。

PHPMyAdmin“内部关系”用于不支持外键的 MyISAM 表。

验证 PHPMyAdmin 是否配置为存储“内部关系”。它将配置存储在名为pma__relation 的表中。实际表名在 PHPMyAdmin 的配置中指定。

https://docs.phpmyadmin.net/en/latest/config.html

如果启用了该功能,配置文件中应该有这样一行:

$cfg['Servers'][$i]['relation'] = 'pma__relation';

(请查阅您正在运行的 PHPMyAdmin 版本的文档。)

并验证pma__relation 表是否存在于您的数据库中。

如果一切看起来都配置正确,那么我将使用几个使用 ENGINE=MYISAM 的测试表测试该功能,并查看它是否适用于这些表。

我不知道该功能是否应该适用于具有 MISAM 以外的存储引擎的表。我不知道它是否适用于 ENGINE=INNODB 表。

【讨论】:

感谢您的回答!我添加了一张我期望视图的图片。 @honiahaka10:我不知道该功能是否应该适用于 INNODB 表或仅适用于 MYISAM 表。检查 PHPMyAdmin 配置并验证指定了“关系”表的名称,并且该表存在于您的数据库中。我已经对我的答案进行了编辑。 @spencer7593 您的回答非常出色且非常透彻。补充一点,内部关系特性应该适用于任何表类型(但实际上对于 MySQL 支持关系的 InnoDB 等表来说意义不大)。我同意这里最可能的原因是缺少或不正确的配置指令或数据库结构。 @honiahaka10 这并不是说 phpMyAdmin 与 InnoDB 表处理内部关系的方式不同,只是 MySQL 实际上与该表类型有关系,所以最好使用本机功能而不是 phpMyAdmin 完成的实现。使用本机 InnoDB 关系将允许您强制执行数据完整性并从使用数据库的所有应用程序之间的关系中受益; phpMyAdmin的内部关系只有在通过phpMyAdmin访问数据库时才有用。 您可以使用 InnoDB 表获得与使用内部表相同的图形增强功能; phpMyAdmin 以相同的方式处理两组关系。最大的区别在于使用其他程序时;只有 InnoDB 对其他应用程序可见。

以上是关于无法使用 phpMyAdmin 在关系视图中设置关系的主要内容,如果未能解决你的问题,请参考以下文章

无法访问关系视图 phpMyAdmin

如何在 MAMP 中使用 phpMyAdmin 在 MySQL 中显示关系视图

如何在 phpmyadmin 中将“关系显示列”设置为默认值

Phpmyadmin 版本 4:关系视图有时不显示外键约束

如何在 PHPMyAdmin 中启用“关系视图”功能

使用 PHP/PHPMyAdmin 导出