Mysql UNIQUE仅在一个字段具有specfic值时才适用的约束

时间:2017-08-06 21:31:25

标签: mysql unique-constraint unique-key

我希望这会以某种方式起作用:

我有一个包含3列的Mysql表:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

如果使用NULL值而不是“已删除”,则可以为给定的user_id(在(user_id,state)上具有唯一的constaint)拥有所需数量的“已删除”行。您的表结构将是这样的:

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

另一个选项将涉及检查更新/发布后插入触发器,无论您是否违反约束并抛出“sql exception”vide https://dev.mysql.com/doc/refman/5.5/en/signal.html