2

让我们考虑一个用户表: Username,email1,email2

现在,我想确保此表中的两行没有任何共同的电子邮件地址。确保这一点的最佳方法是什么?

例如:如果表有行:“Bill,bill@email.com,bill@gmail.com”,那么尝试插入像“Billy,billy@yahoo.com,bill@email.com”这样的行应该会出错。

在此先感谢,钱德雷什

4

3 回答 3

4

看起来您正在尝试使用数据模型强制 1:1 和 1:multiple 之间的组合。您最好的选择是分别存储每个用户名/电子邮件组合。一行用于“用户名,电子邮件 1”,另一行用于“用户名,电子邮件 2”。如果您有其他与“用户名”相关的字段,这些字段可能会保留在核心用户表中,而电子邮件将移动到具有多列唯一索引的两列电子邮件表(用户名,电子邮件)。

于 2009-08-10T19:05:16.193 回答
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
于 2009-08-10T19:02:52.987 回答
0

也许您可以使用某种存储过程,但这可能是您在插入数据之前可以检查的东西。

SELECT email1, email2 FROM yourTable 
WHERE email1 LIKE %@email% or email2 LIKE %@email%
于 2009-08-10T19:04:48.940 回答