我有一张桌子:

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

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

如何在MySql中做到这一点?

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


当前回答

添加唯一索引需要:

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

其他回答

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

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

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

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

添加唯一索引需要:

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

你可以通过phpMyAdmin添加多列唯一索引。(我在4.0.4版本中进行了测试)

导航到目标表的结构页。向其中一列添加唯一索引。展开结构页底部的Indexes列表,以查看刚刚添加的惟一索引。单击编辑图标,在下面的对话框中,您可以向该唯一索引添加其他列。

这适用于mysql 5.5.32版本

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

这个教程对我很有用

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

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