通过 PhpMyAdmin 的复合外键约束?

Posted

技术标签:

【中文标题】通过 PhpMyAdmin 的复合外键约束?【英文标题】:Composite Foreign Key Constraint via PhpMyAdmin? 【发布时间】:2011-08-26 14:22:45 【问题描述】:

有没有办法通过 phpMyAdmin 接口向 InnoDB 表添加复合(多列)外键?我在目标表中已经有了合适的复合主键,我可以单列外键约束,但是我在界面中找不到做复合主键的方法。

Table Log
- Date
- Service
PRIMARY KEY (Date,Service)

Table Issue
- Issue_Id
- Log_Date
- Log_Service
PRIMARY KEY Issue_Id
FOREIGN KEY (Log_Date=Log.Date,Log_Service=Log.Service)

除了外键,一切都已经设置好了;我进入 PhpMyAdmin 关系视图,我只能看到如何针对 Log.Date 而不是针对 Log.Service 设置 FK。

【问题讨论】:

你找到答案了吗?我只能弄清楚如何在 phpMA 中设置简单的 FK 约束。 【参考方案1】:

我刚刚在 phpMyAdmin 中设置复合外键时遇到了类似的问题,也许我的解决方案也可以帮助您。

这是我的设置:

如您所见,我的 ConferenceRoom 表中有一个复合主键,其中一部分也是 Office 表中streetaddress 的外键(这可能与您的问题不同)。

这个复合主键将被 InstPicture 表中的复合外键引用,但对我来说,问题是,尽管将两者都定义为主键索引,phpMyAdmin 只会引用 ConferenceRoom 中的 name 列主键,而不是 office_streetaddress 列。

我在这里缺少的是,在尝试设置 ConferenceRoom 和 InstPicture 之间的关系之前,我还没有设置 ConferenceRoom 和 Office 之间的关系。我想我忘了首先处理强大的实体,因为数据库方法要求。

定义 ConferenceRoom 和 Office 之间的关系后,office_streetaddress 列出现在索引列列表中,并且可以被 InstPicture 表中的 conferenceroom_office_streetaddress 列引用。

我希望这也能对您有所帮助,也许可以尝试为您的 Log.Service 列创建一个单独的索引。或者,如果那是 FK,请设置其关系,然后重试。

【讨论】:

以上是关于通过 PhpMyAdmin 的复合外键约束?的主要内容,如果未能解决你的问题,请参考以下文章

一般错误:1005 无法创建表 errno:150“外键约束格式不正确”)

由于外键 phpMyAdmin 的约束,BigDump 无法导入

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

phpmyadmin 导出后缺少外键约束

PostgreSQL中复合类型列子列的外键约束

如何修复“MySQL 错误:1822。缺少约束索引”关于创建复合外键