条件MYSQL的唯一约束

时间:2010-07-21 10:46:39

标签: mysql

我的数据库中有用户表。

用户具有字段名称,company_id和status:boolean,1- live,0- deleted。

删除用户后,其状态将设置为0.

公司中实时用户名的组合应该是唯一的。删除用户后,我不介意为公司创建具有相同名称的用户。

我的问题是我如何为字段名称,company_id和 status = 1 定义uniuqe约束(这不是对这三个字段的限制因为我不介意组合name-company_id-0将在表格中出现几次。

谢谢,

德沃拉

5 个答案:

答案 0 :(得分:3)

对已删除的用户使用NULL值 唯一键允许无限数量的NULL值。

更新:不要触摸用户名,状态字段中的NULL就足够了。

答案 1 :(得分:1)

您使用的是哪种编程语言?

你的逻辑应该如下

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.

答案 2 :(得分:0)

我会创建另一个列来存储已删除用户的先前名称,并在删除它们时将其真实姓名设置为NULL(以及将状态设置为0)。

然后对名称和公司有一个独特的约束。 NULL不会影响唯一性(因为NULL != NULL),如果需要,您仍然可以恢复用户的原始名称。

所以删除操作类似于:

update users
    set prev_name = name,
        name = null,
        status = 0
where name = 'paxdiablo' and company = 'SmallGreen';

答案 3 :(得分:0)

如果将“实时”和“删除”分开以便它们有自己的tinyint / boolean列会更容易吗?

答案 4 :(得分:-1)

我会用deleted_at(datetime)替换status字段。当用户处于活动状态时,其值将为NULL,但删除后,将设置为当前日期时间。

接下来,我会在用户名和附加信息上添加唯一索引deleted_at字段,这将允许我删除具有相同用户名的多个用户(至少间隔1秒)。