我在我的数据库中有用户表。条件MYSQL的唯一约束条件
用户具有字段name,company_id和status:布尔值,1-实时,0-删除。
当用户被删除,他的状态设置为0。
实时用户名在公司的组合应该是唯一的。删除用户后,我不介意为用户创建同名的公司。
我的问题是我怎么定义uniuqe限制为字段名称,COMPANY_ID和状态= 1(这不是一个uniuqe限制在这三个领域监守我不介意的组合名称company_id- 0会在表格中出现几次)。
感谢,
德沃拉
我在我的数据库中有用户表。条件MYSQL的唯一约束条件
用户具有字段name,company_id和status:布尔值,1-实时,0-删除。
当用户被删除,他的状态设置为0。
实时用户名在公司的组合应该是唯一的。删除用户后,我不介意为用户创建同名的公司。
我的问题是我怎么定义uniuqe限制为字段名称,COMPANY_ID和状态= 1(这不是一个uniuqe限制在这三个领域监守我不介意的组合名称company_id- 0会在表格中出现几次)。
感谢,
德沃拉
删除用户的使用NULL值。
唯一键允许无限数量的NULL值。
更新:不要触摸用户名,NULL在状态字段就足够了。
您正在使用哪种编程语言?
你的逻辑shoule如下
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';
谢谢大家! – Dvora 2010-07-26 05:46:11
它会更容易,如果你拆“活”和“删除”,让他们有自己的TINYINT /布尔列?
我会用deleted_at(datetime)替换状态字段。当用户处于活动状态时,其值将为NULL,但在删除时将设置为当前日期时间。
接下来,我将在用户名& deleted_at字段上添加唯一索引,这将允许我使用相同的用户名(至少1秒间隔)删除多个用户。
面对NULL意图的苍蝇排列(未知或不适用),但它是实用的(我是所有的实用主义)。 – paxdiablo 2010-07-26 06:10:02