我有一张桌子:

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

现在我想让列用户,电子邮件,地址唯一(一起)。

如何在MySql中做到这一点?

当然这个例子只是…一个例子。所以请不要担心语义。


当前回答

这个教程对我很有用

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);

https://www.mysqltutorial.org/mysql-unique-constraint/

其他回答

这个教程对我很有用

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);

https://www.mysqltutorial.org/mysql-unique-constraint/

首先摆脱现有的副本

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;

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

MySql 5或更高版本的行为是这样的(我刚刚测试过):

您可以定义包含可空列的唯一约束。假设你定义了一个唯一的约束(a, B),其中a不是可空的,但B是 当计算这样的约束时,你可以有(a, null)任意多次你想要的(相同的a值!) 你只能有一个(A,不是空B)对

例子: PRODUCT_NAME, PRODUCT_VERSION “玻璃”,null “玻璃”,null “酒”,1

现在,如果您尝试再次插入('wine' 1),它将报告违反约束 希望这能有所帮助

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

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