1

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

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)");

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

4

2 回答 2

4

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

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

于 2013-06-19T12:46:09.543 回答
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);
于 2013-06-19T13:10:59.823 回答