从MySQL表中删除重复行

时间:2015-06-04 01:10:01

标签: mysql sql

所以,我有这个MySQL数据库设置:

+--------------------+----------+
| email              | password |
+--------------------+----------+
| example@gmail.com  | xxx      |
| example2@yahoo.com | xxx      |
| example@gmail.com  | xxx      |
+--------------------+----------+

我想删除电子邮件和密码相同的重复行。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

虽然你已经填好了你的桌子,而且戈登的答案对你目前的情况和可能是最快的解决方案很有帮助,为了防止将来输入重复,你应该:

在您希望唯一的列上创建唯一(复合)索引。在你的情况下你的SQL看起来像:

Alter table yourtablename 
add unique index idx_unq(`email`,`password`);

然后执行INSERT IGNORE INTO而不是INSERT INTO。这将忽略表中填充的任何重复的未来条目。

这篇文章也可以帮到你。

"INSERT INTO .. ON DUPLICATE KEY UPDATE" Only inserts new entries rather than replace?

答案 1 :(得分:1)

鉴于您没有id列,一种方法是创建临时表并重新插入数据:

create temporary table tempt as
     select distinct email, password
     from yourtable;

truncate table yourtable

insert into yourtable(email, password)
    select email, password
    from tempt;

编辑:

_pala有一个好点。您可以使用以下方法来防止此问题:

create unique index idx_table_email_password on table(email, password)

我还建议您添加一个自动递增的主键。但是,问题是从现有表中删除重复项,而不是手头数据的最佳结构。