MySQL - 删除违反唯一性约束的数据

问题描述:

如何删除违反唯一性约束的数据?MySQL - 删除违反唯一性约束的数据

我有一张表,我想添加一个唯一性约束。表内数据违反了这个约束,我想删除它。在这一点上,我不在乎我输的数据,只是最终的数据是好的。

我第一次尝试使用'create table like'来复制表,使用alter table添加唯一键,并将数据从旧表复制到新表。

不幸的是,最后一步复制了所有的数据,并没有抱怨唯一性。

+0

你是如何复制数据的?用INSERT IGNORE? – 2010-07-22 22:59:22

+0

不,我认为我只是使用插入而不忽略 – justinhj 2010-07-27 18:39:52

这将添加唯一索引和下降重复:

ALTER IGNORE TABLE your_table ADD UNIQUE INDEX your_table_index (...); 

the docs

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

+0

好像他已经知道如何做到这一点.. – Ben 2010-07-22 23:01:21

+0

在声明之前使用'set session old_alter_table = 1;'如果您使用InnoDb - 有一个错误,这是解决方法(http://bugs.mysql.com/bug.php?id=40344):) – sensor 2012-11-20 13:54:09