【问题标题】:Removing duplicates from mysql table?从mysql表中删除重复项?
【发布时间】:2013-06-19 12:44:59
【问题描述】:

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

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

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

【问题讨论】:

  • 潜在重复:stackoverflow.com/questions/672702/… 如果 ID 是您的主键,它已经是唯一的。您可以简单地:ALTER IGNORE TABLE my_table ADD UNIQUE(email) 测试并确认。

标签: php duplicates alter


【解决方案1】:

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

UNIQUE (email,id) 表示 id 和 email 对应该是唯一的,因为我假设 id 是主键,所以从来没有。

【讨论】:

【解决方案2】:

@Havsmonstret 解决方案很好,就像你的一样。
它应该按照文档http://dev.mysql.com/doc/refman/5.1/en/alter-table.html 中的描述工作。
但有些不对劲。它没有。
由于最近的一些 InnoDB 版本存在 bug http://bugs.mysql.com/bug.php?id=40344

试试这个查询,它对我有用:

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

【讨论】:

  • 来自未来的小声感谢,显然已经有 10 年了,mysql 仍然没有修复它。虽然我猜这是意料之中的事,但遗憾的是它也出现在 MariaDB 中:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多