【问题标题】:Mysql UNIQUE Constraint that only applies if one field has specfic valuesMysql UNIQUE 约束,仅在一个字段具有特定值时适用
【发布时间】:2017-08-06 21:31:25
【问题描述】:

我希望这能以某种方式工作:

我有一个 3 列的 Mysql 表:

id = int
state = enum('visible', 'moderated', 'deleted')
user_id = int

任何用户都不应拥有超过 1 个条目,即“可见”或“已审核”,但他可以拥有无​​穷无尽的“已删除”条目。

所以,我需要一个关于 user_id 的唯一键,仅当状态为“可见”或“已审核”时才适用

【问题讨论】:

    标签: mysql unique-constraint unique-key


    【解决方案1】:

    基本上有两种选择,第一种相当简单,但需要更改表结构和应用程序逻辑。

    如果您使用 NULL 值而不是“已删除”,则对于给定的 user_id,您可以拥有任意数量的“已删除”行(在 (user_id, state) 上具有唯一约束)。你的表结构应该是这样的:

    id = int
    state = enum('visible', 'moderated') NULL
    user_id = int
    

    另一个选项将涉及检查更新后/后插入触发器,无论您是否没有打破约束并抛出“sql异常”,参见https://dev.mysql.com/doc/refman/5.5/en/signal.html

    【讨论】:

    • NULL 不幸的是,在我的情况下是没有选择的(因为应用程序设计)。但我会研究信号。谢谢!
    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2012-02-09
    • 2023-03-12
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    相关资源
    最近更新 更多