我有一张桌子:

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

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

如何在MySql中做到这一点?

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


当前回答

如果你在mysql中创建表,请使用以下命令:

create table package_template_mapping (
mapping_id  int(10) not null auto_increment  ,
template_id int(10) NOT NULL ,
package_id  int(10) NOT NULL ,
remark      varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);

其他回答

我有一个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 `my_uniq_id` (`id_box_elements`,`id_router`)
);

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

我正在运行MySQL 5.1.42,所以上面讨论的问题可能有一些更新。幸运的是,它起作用了,希望它能一直保持下去。

PostgreSQL… 对于索引,它不起作用;它给了我一个错误,所以我这样做:

alter table table_name
add unique(column_name_1,column_name_2);

PostgreSQL给索引起了自己的名字。我想你可以在表的选项中更改索引的名称,如果需要更改的话…

添加唯一索引需要:

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

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

UPDATE tablename SET id2 = id;

现在在两列上添加unique:

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

我是这样做的:

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

我对唯一index_name的约定是TableName_Column1_Column2_Column3_uindex。