我如何指定MySQL中的多个列的唯一约束?

我有一张桌子:

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

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

我如何在MySql中做到这一点?

  • 当然这个例子只是一个例子。 所以请不要担心语义。
 ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`); 

我有一个MySQL表:

 CREATE TABLE `content_html` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_box_elements` int(11) DEFAULT NULL, `id_router` int(11) DEFAULT NULL, `content` mediumtext COLLATE utf8_czech_ci NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`) ); 

UNIQUE KEY和预期一样工作,它允许id_box_elements和id_router的多个NULL行。

我正在运行MySQL 5.1.42,所以可能在上面讨论的问题上有一些更新。 幸运的是,它的工作原理,希望它会保持这种方式。

如果行中有一个NULL值,那么多列唯一索引在MySQL中不起作用,因为MySQL将NULL视为唯一值,至less目前在多列索引中没有任何逻辑来解决它。 是的行为是疯狂的,因为它限制了多列索引的合法应用程序,但它是什么…截至目前为止,这是一个bug已经被标记为“不会修复”的MySQL错误轨道…

你尝试过吗?

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

这适用于MySQL版本5.5.32

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

您可以通过phpMyAdmin添加多列唯一索引。 (我在版本4.0.4中testing过)

导航到目标表的结构页面。 向其中一列添加一个唯一的索引。 展开结构页面底部的“ 索引”列表,查看刚刚添加的唯一索引。 点击编辑图标,在下面的对话框中,你可以添加额外的列到唯一的索引。

MySql 5或更高的行为就像这样(我刚刚testing过):

  • 您可以定义涉及可空列的唯一约束。 假设你定义了一个唯一的约束(A,B),其中A不是空的,而是B
  • 当评估这样一个约束时,你可以有(A,null)多less次你想要的(相同的A值!)
  • 你只能有一个(A,非空B)对

示例:PRODUCT_NAME,PRODUCT_VERSION'glass',null'glass',null'wine',1

现在,如果您尝试再次插入('wine'1),它会报告违反约束条件希望这有助于

要添加以下唯一索引是必需的:

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

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

在你的情况下,我们可以创build独特的索引如下:

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

如果你想在将来避免重复。 创build另一列说id2。

 UPDATE tablename SET id2 = id; 

现在在两列中添加唯一:

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