如果有人向我提供了实现以下方案的提示,那将会很棒。
table3的两个外键
现在,当我向表3插入一行时,我只希望FK1处于活动状态。
换句话说,现在mysql不允许我插入行,直到满足所有外键约束。 对我来说 - 如果满足FK1或FK2,我的行应插入。有没有办法实现这个目标?
答案 0 :(得分:1)
没有一种真正简单的方法来获得任一或参考约束;但是你可以通过使引用字段为空来使两个FK约束成为可选的。
这不会阻止插入行,但两个引用都为null。为了防止这种可能性,你可以使用BEFORE INSERT触发器来引发错误"如果试图插入这样的行。然后,您可能需要考虑BEFORE UPDATE触发器以防止以类似方式更改行。
答案 1 :(得分:1)
这是一个非典型请求,可能表示您的设计存在问题。话虽这么说,一个可能有效的想法是创建一个只包含一个列的新表。此列是主键,将通过table1和table2上的after insert触发器填充。只有当值不在表中时,才会插入触发器。现在,在表3中,您可以放置一个引用此新列的外键约束。对于要传递的约束,只需要两个表中的一个具有此主键值。