繁体   English   中英

如何使两列在一个表中的值为0/1的mysql中唯一?

[英]How to make two column unique in mysql with value 0/1 in one table?

我有两个列的表,我想打的唯一只有columng is_deleted值为0 email列,所以下面行是有效的,如果abc@gmail.com1进入它将使其中,如果abc@gmail.com0输入不应允许。 如何在mysql中设置此约束?

email           is_deleted
abc@gmail.com   1
abc@gmail.com   1
abc@gmail.com   1
abc@gmail.com   0

我试图使唯一的两个列,它允许一个条目,但此后失败。

abc@gmail.com   1
abc@gmail.com   0

我正在使用唯一字段进行软删除。

谢谢你的帮助。

实际上,这是我一段时间以来在Stack Overflow上看到的更好的问题之一。 根据我的理解,这本身是不可能的,至少没有做一些创造性的工作。

我可以想象的唯一方法是创建一个额外的字段,该字段可以包含任意随机IFF is_deleted == 1,并对所有3使用唯一键。

因此,该表可能如下所示:

email           is_deleted  null_ident
abc@gmail.com   1           0cc175b9c0f1b6a831c399e269772661
abc@gmail.com   1           92eb5ffee6ae2fec3ad71c777531578f
abc@gmail.com   1           4a8a08f09d37b73795649038408b5f33
abc@gmail.com   0           0

因此,只有当is_deleted为0且null_ident也为0时,针对这3个对象的唯一键才会锁定(通过业务逻辑进行处理)。 如果您需要针对地址设置is_deleted,那么还需要设置一个ident键。


另外,在上面的示例中,null_ident只是一个通常可接受的唯一性的md5哈希。 根据您的需要,您可能需要一个更强大(或更可能更不那么强大)的哈希。 哎呀,时间戳很适合您的需求。 索引中的char(36)有点重...但是电子邮件地址的varchar(310)也是如此。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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