我有一张桌子:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在我想让列用户,电子邮件,地址唯一(一起)。
如何在MySql中做到这一点?
当然这个例子只是…一个例子。所以请不要担心语义。
我有一张桌子:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在我想让列用户,电子邮件,地址唯一(一起)。
如何在MySql中做到这一点?
当然这个例子只是…一个例子。所以请不要担心语义。
当前回答
为了添加一个唯一的约束,你需要使用两个组件:
ALTER TABLE -更改表模式,
ADD UNIQUE -添加唯一约束。
然后你可以用'name'(' columnn1 ', 'column2'…)格式定义新的唯一键。
所以对于你的特定问题,你可以使用这个命令:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
其他回答
如果你想避免重复以后。创建另一个列id2。
UPDATE tablename SET id2 = id;
现在在两列上添加unique:
alter table tablename add unique index(columnname, id2);
这适用于mysql 5.5.32版本
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
我有一个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,所以上面讨论的问题可能有一些更新。幸运的是,它起作用了,希望它能一直保持下去。
如果你在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中不起作用,如果你在row中有一个NULL值,因为MySQL将NULL视为一个唯一值,至少目前在多列索引中没有围绕它工作的逻辑。是的,这种行为是疯狂的,因为它限制了许多多列索引的合法应用,但它就是这样……到目前为止,这是一个在MySQL bug-track上被标记为“不会修复”的错误…