SQL:约束强制执行至少一个&&每个键最多一个

时间:2012-03-20 12:28:12

标签: mysql constraints conditional-statements minimum

我的表架构是:

 r(int aID not null, int bID not null, bool main)

主键(aId,bID)。 aID和bID都是外键(指不同的表)。

我想对每个aID强制执行,只有一个和一个bID也是main = true。

如何在db级别中执行此操作? 我可以通过添加constraint unique (aID, main)来强制执行“max 1”,并且main可以为true或NULL。

“至少1”部分怎么样?

PS:致力于MySQL。

编辑:示例数据以便澄清: 您可以拥有aID和bID的各种组合,但是对于每个aID,只有一个组合也应具有main = true。 演示数据:

 1, 2, true
 1, 3, NULL
 1, 4, NULL
 1, 5, true <- wrong, only one main=true
 ...

1 个答案:

答案 0 :(得分:0)

您应该创建两个触发器。它们都适用于每一行。第一个将在插入之前适用,第二个将在更新之前适用。如果main = true并且表中至少有一行具有与new.aID相同的aID但具有不同的bID,同样使用main = true,则设置new.main = false。

您可以在大多数RDBMS中的单个触发器中执行此操作,但MySQL不支持(如果我没有记错)触发器适用于插入和更新。