让我们考虑一个用户表: 用户名,EMAIL1,EMAIL2
现在,我想确保此表中没有两行有任何常见的电子邮件地址。什么是确保这一点的最佳方法?
例如:如果表格有行:“Bill,bill @ email.com,bill @ gmail.com”,那么 试图插入像“Billy,billy @ yahoo.com,bill @ email.com”这样的行应该会出错。
提前致谢, Chandresh
答案 0 :(得分:4)
看起来您正在尝试使用数据模型强制1:1和1:之间的组合。您最好的选择是分别存储每个用户名/电子邮件组合。 “Username,email1”的一行和“Username,email2”的另一行。如果您有其他“用户名”相关字段,那么这些字段可以保留在核心用户表中,而电子邮件将移动到具有多列唯一索引的两列电子邮件表(用户名,电子邮件)。
答案 1 :(得分:1)
可悲的是,check
约束不是MySQL的一个特性。嗯,他们是,但他们被忽略了。
使用trigger
代替:
create trigger MyValidation after insert on user for each row
begin
if (select count(*) from user where
email1 = new.email1
or email1 = new.email2
or email2 = new.email1
or email2 = new.email2) > 0 then
--I know that the delete could use this logic, but you can
--insert other instructions here.
delete from user where username = new.username
end if
end
答案 2 :(得分:0)
也许您可以使用某种存储过程,但这可能是您在插入数据之前可以检查的内容。
SELECT email1, email2 FROM yourTable
WHERE email1 LIKE %@email% or email2 LIKE %@email%