让我们考虑一个用户表: Username,email1,email2
现在,我想确保此表中的两行没有任何共同的电子邮件地址。确保这一点的最佳方法是什么?
例如:如果表有行:“Bill,bill@email.com,bill@gmail.com”,那么尝试插入像“Billy,billy@yahoo.com,bill@email.com”这样的行应该会出错。
在此先感谢,钱德雷什
让我们考虑一个用户表: Username,email1,email2
现在,我想确保此表中的两行没有任何共同的电子邮件地址。确保这一点的最佳方法是什么?
例如:如果表有行:“Bill,bill@email.com,bill@gmail.com”,那么尝试插入像“Billy,billy@yahoo.com,bill@email.com”这样的行应该会出错。
在此先感谢,钱德雷什
看起来您正在尝试使用数据模型强制 1:1 和 1:multiple 之间的组合。您最好的选择是分别存储每个用户名/电子邮件组合。一行用于“用户名,电子邮件 1”,另一行用于“用户名,电子邮件 2”。如果您有其他与“用户名”相关的字段,这些字段可能会保留在核心用户表中,而电子邮件将移动到具有多列唯一索引的两列电子邮件表(用户名,电子邮件)。
遗憾的是,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
也许您可以使用某种存储过程,但这可能是您在插入数据之前可以检查的东西。
SELECT email1, email2 FROM yourTable
WHERE email1 LIKE %@email% or email2 LIKE %@email%