【问题标题】:SQL: constraint enforcing at least one && maximum one for each keySQL:对每个键强制执行至少一个 && 最大一个的约束
【发布时间】:2012-04-04 22:00:43
【问题描述】:

我的表架构是:

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

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

我想强制规定,对于每个 aID,始终只有一个 bID 也是 main=true。

如何在数据库级别做到这一点? 我可以通过添加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
 ...

【问题讨论】:

    标签: mysql constraints conditional-statements minimum


    【解决方案1】:

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

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

    【讨论】:

    • 也许我没有正确解释,请参阅更新的原始帖子。谢谢!
    • 我明白,我会编辑我的答案,它的第二个版本会更有帮助,至少我希望如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2015-04-05
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多