MySQL中多个字段的唯一约束

时间:2012-09-19 19:56:23

标签: mysql

假设我有一个包含以下字段的表格:

primaryEmail | secondaryEmail

我知道如何在其中一个字段上创建UNIQUE约束,并且我知道如何创建组合两个字段的UNIQUE约束,但是有一个方式确保没有值存在两次,ACROSS两列?例如,如果joe@example.com字段中的primaryEmail值为primaryEmail,我不希望它再次出现在secondaryEmail字段或{{1}}中字段。

2 个答案:

答案 0 :(得分:2)

您可以考虑修改数据模型并将电子邮件地址拉到另一个表格,然后将新旧表格关联在一起。在我的头脑中,这样的事情应该起作用

create table master (
  id int not null primary key,
  name varchar(64)
);

create table email (
  id int not null primary key,
  address varchar(128) not null unique,
  parent_id int not null,
  type enum('prim', 'secd'),
  foreign key (parent_id) references master(id)
    on delete cascade,
  unique (parent_id, type)
);

我不喜欢这种设计 - 例如,我不是enum的粉丝 - 但它会解决你的独特性约束。

答案 1 :(得分:0)

在我看来,如果你真的想要完成的话,你会希望在该字段上加上两个单独的约束。你实际上要做的是两件事(确保列在记录中是唯一的,并确保该行中的列对于整个表也是唯一的。)