我有一张桌子:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在我想让列用户,电子邮件,地址唯一(一起)。
如何在MySql中做到这一点?
当然这个例子只是…一个例子。所以请不要担心语义。
我有一张桌子:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在我想让列用户,电子邮件,地址唯一(一起)。
如何在MySql中做到这一点?
当然这个例子只是…一个例子。所以请不要担心语义。
当前回答
如果你想避免重复以后。创建另一个列id2。
UPDATE tablename SET id2 = id;
现在在两列上添加unique:
alter table tablename add unique index(columnname, id2);
其他回答
你试过这个吗?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
为了添加一个唯一的约束,你需要使用两个组件:
ALTER TABLE -更改表模式,
ADD UNIQUE -添加唯一约束。
然后你可以用'name'(' columnn1 ', 'column2'…)格式定义新的唯一键。
所以对于你的特定问题,你可以使用这个命令:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
这适用于mysql 5.5.32版本
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
首先摆脱现有的副本
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;
请注意,如果用户、电子邮件、地址中有任何一个值为空,则它们将被视为唯一的。
PostgreSQL… 对于索引,它不起作用;它给了我一个错误,所以我这样做:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL给索引起了自己的名字。我想你可以在表的选项中更改索引的名称,如果需要更改的话…