繁体   English   中英

具有条件MYSQL的唯一约束

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM