问题描述
我正在尝试使用 ALTER IGNORE TABLE + 一个唯一键从 MySQL 表中删除重复项.MySQL 文档说:
I'm trying to remove duplicates from a MySQL table using ALTER IGNORE TABLE + an UNIQUE KEY. The MySQL documentation says:
IGNORE 是标准 SQL 的 MySQL 扩展.如果新表中的唯一键存在重复项,或者在启用严格模式时出现警告,它会控制 ALTER TABLE 的工作方式.如果未指定 IGNORE,则复制将中止并在出现重复键错误时回滚.如果指定了 IGNORE,则只有第一行用于在唯一键上具有重复项的行.其他冲突行被删除.不正确的值被截断为最接近匹配的可接受值.
当我运行查询时......
When I run the query ...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
...我仍然收到错误 #1062 - 键 'dupidx' 的重复条目 'blabla'.
... I still get the error #1062 - Duplicate entry 'blabla' for key 'dupidx'.
推荐答案
IGNORE
关键字扩展到 MySQL 似乎有一个 某些版本的 MySQL 上的 InnoDB 版本中的错误.
The IGNORE
keyword extension to MySQL seems to have a bug in the InnoDB version on some version of MySQL.
您总是可以转换为 MyISAM,忽略添加索引,然后转换回 InnoDB
You could always, convert to MyISAM, IGNORE-ADD the index and then convert back to InnoDB
ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;
请注意,如果您有外键约束,这将不起作用,您必须先删除它们,然后再重新添加.
Note, if you have Foreign Key constraints this will not work, you will have to remove those first, and add them back later.
这篇关于MySQL:ALTER IGNORE TABLE 给出“完整性约束违规";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!