假设我有一个包含以下字段的表:
primaryEmail | secondaryEmail
我知道如何UNIQUE
在其中一个字段上创建一个约束,并且我知道如何创建一个结合UNIQUE
两个字段的约束,但是有没有办法确保没有值存在两次,跨越两列?例如,如果字段中有值,我不希望它能够再次出现在字段或字段中。joe@example.com
primaryEmail
primaryEmail
secondaryEmail
假设我有一个包含以下字段的表:
primaryEmail | secondaryEmail
我知道如何UNIQUE
在其中一个字段上创建一个约束,并且我知道如何创建一个结合UNIQUE
两个字段的约束,但是有没有办法确保没有值存在两次,跨越两列?例如,如果字段中有值,我不希望它能够再次出现在字段或字段中。joe@example.com
primaryEmail
primaryEmail
secondaryEmail
您可能会考虑修改您的数据模型并将电子邮件地址拉到另一个表,然后将新表和旧表关联在一起。在我的脑海中,这样的事情应该可以工作
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)
);
我不喜欢这种设计——例如,我不喜欢枚举——但它会解决你的唯一性限制。
在我看来,如果这确实是你想要完成的事情,你会想要在那个领域设置两个单独的约束。您实际上要做的是两件不同的事情(确保该列在记录中是唯一的,并确保该行中的列对于整个表也是唯一的)。