[英]Unique constrain with condition MYSQL
我的数据库中有用户表。
用户具有字段名称,company_id和status:boolean,1- live,0- deleted。
删除用户后,其状态将设置为0。
公司中的实时用户名组合应该是唯一的。 删除用户后,我不介意应该为公司创建具有相同名称的用户。
我的问题是如何为字段名称,company_id和status = 1定义uniuqe约束(这不是对这三个字段的限制因为我不介意name-company_id-0的组合会出现几次在表中)。
谢谢,
德沃拉
对已删除的用户使用NULL值。
唯一键允许无限数量的NULL值。
更新:不要触摸用户名,状态字段中的NULL就足够了。
您使用的是哪种编程语言?
你的逻辑应该如下
select * from Table_name where name='' AND company_id = '' AND status = 1
if this return any rows give uniqueness error to the user else create it.
我将创建另一列来存储已删除用户的先前名称,并在删除它们时将其真实名称设置为NULL(以及将状态设置为0)。
然后对名称和公司有一个独特的约束。 NULL不会影响唯一性(因为NULL != NULL
),如果需要,您仍然可以恢复用户的原始名称。
所以删除操作类似于:
update users
set prev_name = name,
name = null,
status = 0
where name = 'paxdiablo' and company = 'SmallGreen';
如果你拆分“实时”和“删除”这样它们有自己的tinyint / boolean列会更容易吗?
我会用deleted_at(datetime)替换status字段。 当用户处于活动状态时,其值将为NULL,但在删除时,它将设置为当前日期时间。
接下来,我将在username和deleted_at字段上添加唯一索引,这将允许我删除具有相同用户名的多个用户(至少1秒间隔)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.