问题:MySQL:ALTER IGNORE TABLE 给出“完整性约束违规”

我正在尝试使用 ALTER IGNORE TABLE + UNIQUE KEY 从 MySQL 表中删除重复项。 MySQL 文档说:

IGNORE 是标准 SQL 的 MySQL 扩展。如果新表中的唯一键有重复项或启用严格模式时出现警告,它会控制 ALTER TABLE 的工作方式。如果未指定 IGNORE,则如果发生重复键错误,则副本将中止并回滚。如果指定了 IGNORE,则只有第一行用于在唯一键上具有重复项的行。其他冲突的行被删除。不正确的值将被截断为最接近的匹配可接受值。

当我运行查询...

ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)

...我仍然收到错误 **#1062 - 键 'dupidx' 的重复条目 'blabla' **。

解答

MySQL 的IGNORE关键字扩展似乎在某些版本的 MySQL 上的 InnoDB 版本](http://bugs.mysql.com/bug.php?id=40344)中存在[错误。

您可以随时转换为 MyISAM,IGNORE-ADD 索引,然后转换回 InnoDB

ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;

请注意,如果您有外键约束,这将不起作用,您必须先删除这些约束,然后再将它们添加回来。

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐