我试图使用ALTER IGNORE table+唯一键从MySQL表中删除重复项.MySQL文档说:

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

当我运行查询时...

ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)

... 我仍然得到错误#1062 - Duplicate entry 'blabla' for key 'dupidx'.

推荐答案

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;

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

Mysql相关问答推荐

MySQL在带有特定属性值上的对象的数组的杨森对象中搜索

过程/别名是有点长的MySQL命令的一部分吗?

用于搜索从各种表中获得的结果的查询

插入时发生日期时间字段溢出错误

MySQL滑动窗口动态间隔?

SQL查询连接到多个类别的项目

外部磁盘上的MySQL表空间和数据文件

在带有 D.I 的 .NET AWS Lambda 中使用 MySql.Data

关于设置为 NOT NULL 时的 CHAR 默认值

关联同一个表中的两列

为生日创建 MySQL 索引

如何使用 C++ 连接 mySQL 数据库

让 MySQL 在 OSX 10.7 Lion 上运行

ASP.NET EntityFramework 获取数据库名称

如何在 python 中逐行获取 MySQL ResultSet

Ubuntu 中的 MySQL JDBC jar 文件在哪里?

错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)

如何将数组存储到mysql中?

应该使用什么列类型将序列化数据存储在 mysql 数据库中?

MySQL - 重复表