Answers:
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视为唯一值,并且至少当前在多列索引中没有逻辑可以解决。是的,这种行为是疯狂的,因为它限制了许多多列索引的合法应用程序,但事实就是如此……到目前为止,这是一个在MySQL上标有“无法修复”的错误错误跟踪...
ENGINE BDB
,并且,2)这是有记录的行为,尽管恕我直言,鉴于它可能令人惊讶/令人不愉快,因此没有公开的记录。有关讨论,请参见MySQL错误25544 bugs.mysql.com/bug.php?id=25544。
这适用于MySQL 5.5.32版
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5或更高版本的行为如下(我刚刚测试过):
范例:PRODUCT_NAME,PRODUCT_VERSION'glass',null'glass',null'wine',1
现在,如果您尝试再次插入(“葡萄酒” 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`);
如果要在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)
);
首先摆脱现有的重复
delete a from votes as a, votes as b where a.id < b.id
and a.user <=> b.user and a.email <=> b.email
and a.address <=> b.address;
然后添加唯一约束
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
用以下方法验证约束
SHOW CREATE TABLE votes;
请注意,如果用户,电子邮件,地址中的任何一个具有空值,则将被视为唯一。
对于PostgreSQL ...它对索引不起作用。它给了我一个错误,所以我这样做了:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL给唯一索引起了自己的名字。我想如果需要更改索引,可以在表的选项中更改索引的名称...