[英]MySQL select unique rows in two columns with the highest value in one column
[英]How to make two column unique in mysql with value 0/1 in one table?
我有两个列的表,我想打的唯一只有columng is_deleted
值为0 email列,所以下面行是有效的,如果abc@gmail.com
与1
进入它将使其中,如果abc@gmail.com
与0
输入不应允许。 如何在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.