从mysql表中删除重复项?

时间:2013-06-19 12:45:00

标签: php duplicates alter

我有一个相当简单的测试数据库:

id  email
1   blue@yellow.com
2   pink@test.com
3   ace@ace.com
4   ace@ace.com
5   peter@something.com
6   peter@something.com
7   mouse@mouse.com
8   monkeyman@test.com
9   mouse@mouse.com

我想删除应该将表改为:

的重复项
id  email
1   blue@yellow.com
2   pink@test.com
3   ace@ace.com
5   peter@something.com
7   mouse@mouse.com
8   monkeyman@test.com

或者使用新ID并不重要。

我偶然发现了这个问题:

mysqli_query($con,"ALTER IGNORE TABLE mytest ADD UNIQUE (email,id)");

但是,唉,它什么也没做。我做错了什么?

2 个答案:

答案 0 :(得分:4)

尝试mysqli_query($con,"ALTER IGNORE TABLE mytest ADD UNIQUE (email)");

UNIQUE (email,id)表示id和email对应该是唯一的,因为我假设id是主键,所以它永远不会是。

答案 1 :(得分:1)

@Havsmonstret解决方案很好,就像你的一样 它应该如文档http://dev.mysql.com/doc/refman/5.1/en/alter-table.html中所述 但有些事情是错的。它没有。
由于InnoDB http://bugs.mysql.com/bug.php?id=40344

的某些最新版本存在错误

尝试这些查询,它对我有用:

SET SESSION old_alter_table=1;
ALTER IGNORE TABLE mytest ADD UNIQUE (email,id);