【问题标题】:MySQL : Composite primary key as foreign keyMySQL:复合主键作为外键
【发布时间】:2016-11-25 09:26:33
【问题描述】:

我尝试在 mysql 中这样做:

创建第一个表,其中包含 A、B、C 列以及 A 和 B 上的复合主键。 创建第二个表 A、B、D、E 列,其中 A、B、D 作为主键,当然 A、B 作为第一个表的外部引用。

我使用 mysql 工作台创建列、添加键和外部约束,但是当我尝试应用时收到此错误:

错误 1215:无法添加外键约束

问题是我不知道我的设计到底出了什么问题。

你能帮帮我吗?

【问题讨论】:

  • 请提供minimal reproducible example 并阅读How to Ask。特别是显示您的 DDL。可能您没有意识到 FK 的引用列必须声明为 PK 或 UNIQUE NOT NULL。 (这里是 ABDE 中的 AB。)但是“作为外键引用”没有意义。 FK 进行引用。我希望你真的想要 ABDE(AB) REFERENCES ABC(AB)。请用谷歌搜索您的问题的描述(以正确的方式使用“参考”),这是一个常见问题解答。

标签: mysql foreign-keys key composite-primary-key


【解决方案1】:

您的问题是第二个表中有 (A, B) 对,而第一个表中没有匹配项。

运行这个:

select secondTable.A, secondTable.B
from secondTable
where not exists (select 1
                  from firstTable
                  where firstTable.A = secondTable.A and firstTable.B = secondTable.B);

通过此查询,您将在secondTable 中找到与firstTable 中的任何记录都不匹配的AB 值。

为了能够创建您的foreign key,您需要从secondTableinsertinto firstTable 的匹配项中删除这些记录。

【讨论】:

  • 感谢您的帮助。实际上我没有任何数据进入第二个表,因为我正在构建它。
  • @RonanQuintin,表的类型匹配吗?你能给我们一些代码吗?
猜你喜欢
  • 1970-01-01
  • 2016-07-04
  • 2021-07-24
  • 2016-08-21
  • 2012-05-20
  • 2012-01-27
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
相关资源
最近更新 更多