Mysql的唯一约束只适用,如果一个字段有specfic值
问题描述:
我希望这个作品以某种方式:Mysql的唯一约束只适用,如果一个字段有specfic值
我有一个MySQL表有3列:
id = int
state = enum('visible', 'moderated', 'deleted')
user_id = int
用户不应该有超过1项,这是'可见'或'主持',但他可以有无尽的'删除'条目。
所以,我需要在user_ID的唯一密钥,只适用,如果状态是“看得见”或“缓和”
答
基本上有两种选择,第一种是相当简单,但需要在表中的变化结构和应用逻辑。
如果您使用NULL值而不是'deleted',那么您可以根据给定的user_id(在(user_id,state)上具有唯一的常量)具有尽可能多的“删除”行。你的表结构是这样的:
id = int
state = enum('visible', 'moderated') NULL
user_id = int
另一种选择将包括在之后的更新/后插入检查触发不管你是不是破坏了你contraint和投掷“SQL异常”韦迪https://dev.mysql.com/doc/refman/5.5/en/signal.html
NULL是不幸在我的情况下没有选择(因为应用程序设计)。但我会研究信号。谢谢! – sugo