我正在尝试使用ALTER IGNORE table +唯一键来删除MySQL表中的重复项。MySQL文档中写道:
SQL是对标准
的MySQL扩展。它控制如果新表中存在唯一键上的重复项,或者在启用严格模式时出现警告,ALTER TABLE如何工作。如果未指定IGNORE,则会在发生重复键错误时中止并回滚复制。如果指定了IGNORE,则在唯一键上具有重复项的行中只使用第一行。其他冲突行将被删除。不正确的值将被截断为最匹配的可接受值。
当我运行查询时...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
..。我仍然收到错误#1062 -键'dupidx'的重复条目'blabla‘。
发布于 2011-11-09 00:31:00
MySQL的IGNORE
关键字扩展似乎在某些版本的MySQL上有一个bug in the InnoDB version。
您可以始终转换为MyISAM,忽略-添加索引,然后转换回InnoDB
ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;
请注意,如果您有外键约束,这将不起作用,您必须先删除这些约束,然后再添加它们。
发布于 2013-07-31 22:28:29
或者尝试设置会话old_alter_table=1 (不要忘记将其设置回去!)
请参阅:http://mysqlolyk.wordpress.com/2012/02/18/alter-ignore-table-add-index-always-give-errors/
发布于 2011-11-09 01:02:57
问题是您试图索引的字段中有重复的数据。在添加唯一索引之前,您需要删除有问题的重复项。
一种方法是执行以下操作:
CREATE TABLE tmp_table LIKE table;
ALTER IGNORE TABLE tmp_table ADD UNIQUE INDEX dupidx (field);
INSERT IGNORE INTO tmp_table SELECT * FROM table;
DROP TABLE table;
RENAME TABLE tmp_table TO table;
这允许您仅将唯一数据插入到表中
https://stackoverflow.com/questions/8053447
复制相似问题