假设我有一个包含以下字段的表格:
primaryEmail | secondaryEmail
我知道如何在其中一个字段上创建UNIQUE
约束,并且我知道如何创建组合两个字段的UNIQUE
约束,但是有一个方式确保没有值存在两次,ACROSS两列?例如,如果joe@example.com
字段中的primaryEmail
值为primaryEmail
,我不希望它再次出现在secondaryEmail
字段或{{1}}中字段。
答案 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)
在我看来,如果你真的想要完成的话,你会希望在该字段上加上两个单独的约束。你实际上要做的是两件事(确保列在记录中是唯一的,并确保该行中的列对于整个表也是唯一的。)