Mysql中的两列,其中column1和column2之间具有唯一性约束

时间:2009-08-10 18:55:26

标签: mysql indexing unique constraints

让我们考虑一个用户表: 用户名,EMAIL1,EMAIL2

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

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

提前致谢,  Chandresh

3 个答案:

答案 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%