我有一张桌子:

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

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

如何在MySql中做到这一点?

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


当前回答

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

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

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

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

其他回答

如果你想避免重复以后。创建另一个列id2。

UPDATE tablename SET id2 = id;

现在在两列上添加unique:

alter table tablename add unique index(columnname, id2);

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

这适用于mysql 5.5.32版本

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

添加唯一索引需要:

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