如何在MySQL中为多个列指定唯一约束?

1041

我有一个表格:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

现在,我想让列 user,email,address (三个一起)成为唯一的。

我该如何在MySQL中实现这一点?

当然,这只是一个示例,请不要担心语义。

15个回答

3

添加唯一索引需要以下内容:

1)表名
2)索引名称
3)要添加索引的列

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

在您的情况下,我们可以按照以下方式创建唯一索引:
ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

2

如果您想避免未来出现重复,请创建另一列,例如id2。

UPDATE tablename SET id2 = id;

现在在两列上添加唯一约束:
alter table tablename add unique index(columnname, id2);

0
在MySQL Workbench中:
1. 创建一个索引 2. 选择要包含在索引中的列 3. 从类型菜单中选择UNIQUE

MySQL Workbench GUI - Indexes tab


0

首先去除现有的重复项

delete a from votes as a, votes as b where a.id < b.id 
and a.user <=> b.user and a.email <=> b.email 
and a.address <=> b.address;

然后添加唯一约束

ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);

使用以下代码验证约束条件

SHOW CREATE TABLE votes;

请注意,如果用户、电子邮件或地址中有任何一个为空值,则它们将被视为唯一。

0

对于PostgreSQL... 使用索引时它对我不起作用,给了我一个错误,所以我做了这个:

alter table table_name
add unique(column_name_1,column_name_2);

PostgreSQL为唯一索引提供了自己的名称。如果需要更改名称,我想您可以在表选项中更改索引的名称...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接