我希望这会以某种方式起作用:
我有一个包含3列的Mysql表:
id = int
state = enum('visible', 'moderated', 'deleted')
user_id = int
任何用户都不应该有超过1个条目,即“可见”或“已审核”,但他可以拥有无限的“已删除”条目。
所以,我需要一个关于user_id的UNIQUE键,只有当状态为“可见”或“已审核”时才适用
答案 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