我发现使用“ALTER IGNORE”添加一个 unqiue 索引很有帮助,它可以删除重复项并强制执行听起来像您想做的唯一记录。所以语法是:
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(`id`, `another_id`, `one_more_id`);
这有效地添加了唯一约束,这意味着您将永远不会有重复的记录,并且 IGNORE 会删除现有的重复项。
您可以在此处阅读有关 eh ALTER IGNORE 的更多信息:http: //mediakey.dk/~cc/mysql-remove-duplicate-entries/
更新:@Inquisitive 通知我,这在 MySql> 5.5 版本中可能会失败:
它在 MySQL > 5.5 和 InnoDB 表以及 Percona 中失败,因为它们的 InnoDB 快速索引创建功能 [ http://bugs.mysql.com/bug.php?id=40344]。在这种情况下,首先运行set session old_alter_table=1
,然后上面的命令将正常工作
更新 -ALTER IGNORE
在 5.7 中删除
从文档
从 MySQL 5.6.17 开始,不推荐使用 IGNORE 子句,并且它的使用会产生警告。IGNORE 在 MySQL 5.7 中被删除。
MySQL 开发人员之一提供了两种选择:
- 按唯一字段分组并删除,如上所示
- 创建一个新表,添加一个唯一索引,使用
INSERT IGNORE
,例如:
CREATE TABLE duplicate_row_table LIKE regular_row_table;
ALTER TABLE duplicate_row_table ADD UNIQUE INDEX (id, another_id);
INSERT IGNORE INTO duplicate_row_table SELECT * FROM regular_row_table;
DROP TABLE regular_row_table;
RENAME TABLE duplicate_row_table TO regular_row_table;
但是根据您的桌子的大小,这可能不实用