mysql - 具有不同表的不同列的多个外键

时间:2018-04-09 16:24:11

标签: mysql mysql-workbench

如果有人向我提供了实现以下方案的提示,那将会很棒。

table3的两个外键

  • FK1参考table1 column1
  • FK2参考表2 column1

现在,当我向表3插入一行时,我只希望FK1处于活动状态。

换句话说,现在mysql不允许我插入行,直到满足所有外键约束。 对我来说 - 如果满足FK1或FK2,我的行应插入。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

没有一种真正简单的方法来获得任一或参考约束;但是你可以通过使引用字段为空来使两个FK约束成为可选的。

这不会阻止插入行,但两个引用都为null。为了防止这种可能性,你可以使用BEFORE INSERT触发器来引发错误"如果试图插入这样的行。然后,您可能需要考虑BEFORE UPDATE触发器以防止以类似方式更改行。

答案 1 :(得分:1)

这是一个非典型请求,可能表示您的设计存在问题。话虽这么说,一个可能有效的想法是创建一个只包含一个列的新表。此列是主键,将通过table1和table2上的after insert触发器填充。只有当值不在表中时,才会插入触发器。现在,在表3中,您可以放置​​一个引用此新列的外键约束。对于要传递的约束,只需要两个表中的一个具有此主键值。