我有一张桌子:

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);

其他回答

为了添加一个唯一的约束,你需要使用两个组件:

ALTER TABLE -更改表模式,

ADD UNIQUE -添加唯一约束。

然后你可以用'name'(' columnn1 ', 'column2'…)格式定义新的唯一键。

所以对于你的特定问题,你可以使用这个命令:

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

添加唯一索引需要:

1) table_name 2) index_name 3)要添加索引的列

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

在你的情况下,我们可以创建唯一的索引如下:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

你试过这个吗?

UNIQUE KEY `thekey` (`user`,`email`,`address`)

多列唯一索引在MySQL中不起作用,如果你在row中有一个NULL值,因为MySQL将NULL视为一个唯一值,至少目前在多列索引中没有围绕它工作的逻辑。是的,这种行为是疯狂的,因为它限制了许多多列索引的合法应用,但它就是这样……到目前为止,这是一个在MySQL bug-track上被标记为“不会修复”的错误…

我是这样做的:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

我对唯一index_name的约定是TableName_Column1_Column2_Column3_uindex。