MySQL如何删除mysql数据表内的重复数据

2024-04-16 0 177
目录
  • 方法一: 借助 inner join
  • 方法二: 借助 group by
  • 方法三:借助 临时表
  • 总结

删除数据表内重复数据的常规顺序是:创建备份、确定重复记录、编写删除语句

方法一: 借助 inner join

DELETE t1 FROM table t1
INNER JOIN table t2
WHERE t1.id < t2.id AND t1.column1 = t2.column1;

  • table是表名,id是表的唯一标识符,column1是想要根据其删除重复记录的列。这条SQL语句会删除column1列中具有相同值的所有记录,除了id最大的那一条记录。
  • 工作方式是,它会为表中的每个重复的column1值找到id值最小的记录,并将其删除。这样,只有id值最大的记录会被保留下来。

注:在执行操作之前,务必备份数据,以防万一。

方法二: 借助 group by

DELETE FROM your_table
WHERE id NOT IN (
SELECT MAX(id)
FROM your_table
GROUP BY column1, column2, … /* 列出用于判断重复的列 */
);

  • 这条语句会保留每组重复记录中的最大的 id,并删除其他重复记录。column1, column2 为用来判断重复的列名。

注:在执行操作之前,务必备份数据,以防万一。

方法三:借助 临时表

如果数据量很大,删除重复数据可以采用创建临时表的方式,效率更高。

步骤:

1.创建一个新的临时表,并将去重后的数据插入到新表中。

CREATE TABLE new_table AS
SELECT * FROM old_table
GROUP BY column_to_be_deduplicated;

在这里,new_table 是新创建的临时表的名字,old_table 是原来的表名,column_to_be_deduplicated 是需要去重的列名。

2.删除原来的表/修改原来的表名

DROP TABLE old_table;
RENAME TABLE old_table TO old_table_bak;

将新的临时表重命名为原来的表名。

RENAME TABLE new_table TO old_table;

这种方式是先将去重后的数据插入到一个新的临时表,然后删除旧的表/修改旧表的名字,最后将临时表重命名为旧表的名字,好处是在处理大量数据时,效率会更高。

在第二步的时候不建议采用直接删除旧表的方式,凡是涉及到数据变动的,均需万分谨慎。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持悠久资源网。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Mysql MySQL如何删除mysql数据表内的重复数据 https://www.u-9.cn/database/mysql/185228.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务