建表:
插入数据:
创建唯一索引:
执行结果:
ERROR 1062 (23000): Duplicate entry 'u2@email.com' for key 'idx_email'像这样提示有重复数据,导致创建唯一索引失败。是因为我们插入的email字段的确有重复数据。
可以使用group by看看email字段完全不重复的数据。为了让结果看起来比较顺眼,我们使用order by对结果排一下序,这个不是必选项。可以发现,假如表中原本有30条记录,group by得出的结果是只有20条记录,这就说明有10条重复记录。
5.删除重复数据只保留id最小的数据,其他重复的都给删掉。
执行结果:
ERROR 1093 (HY000): You can't specify target table 'demo_table' for update in FROM clause
这是是MySQL有保护机制,不可以这样操作。
如果不是纯使用SQL方式处理,而是通过编程处理,可以把select min(id) from demo_table group by email查询出来的id结果集保存在变量中,然后再执行delete from demo_table where id not id结果集。有一点需要注意的是,可能id结果集很大很大,保存在变量中会吃内存。
6.把需要保留的数据id存在临时表中,然后删除重复数据。
删除重复数据:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。