MySQL如何高效去除重复行:方法与实战详解
在MySQL中,使用DISTINCT关键字或GROUP BY子句可以快速去除查询结果中的重复行,而若需直接删除表中的重复数据,则可结合ROW_NUMBER()窗口函数或创建临时表实现,下面将详细展开具体操作:
-
使用
DISTINCT关键字
在查询语句中直接添加DISTINCT,可返回唯一值。
SELECT DISTINCT column1, column2 FROM table_name;
适用于简单去重,但仅针对查询结果,不改变原表数据。
-
利用
GROUP BY分组去重
通过分组聚合实现去重,常配合聚合函数使用:SELECT column1, column2 FROM table_name GROUP BY column1, column2;
与
DISTINCT效果类似,但更灵活,可在分组后进行统计计算。 -
删除表中重复数据(保留单条记录)
使用窗口函数ROW_NUMBER()(MySQL 8.0及以上版本支持):DELETE FROM table_name WHERE id IN ( SELECT id FROM ( SELECT id, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS row_num FROM table_name ) AS temp WHERE row_num > 1 );此方法通过为每组重复数据编号,仅保留第一条(按
id排序),安全删除多余重复行。 -
创建临时表去重
适用于所有MySQL版本,通过复制唯一数据到新表后替换原表:CREATE TABLE new_table AS SELECT DISTINCT * FROM old_table; RENAME TABLE old_table TO backup_table, new_table TO old_table;
注意备份原表,避免数据丢失。
-
使用
INNER JOIN自连接删除
针对无唯一标识列的表,可通过连接查询删除重复项:DELETE t1 FROM table_name t1 INNER JOIN table_name t2 WHERE t1.id > t2.id AND t1.column1 = t2.column1 AND t1.column2 = t2.column2;
保留
id最小的记录,删除其他重复行。
总结建议:
- 查询去重优先选
DISTINCT或GROUP BY; - 删除数据时推荐用
ROW_NUMBER(),操作前务必备份数据; - 对大型表操作时,通过添加索引(如
ALTER TABLE table_name ADD INDEX idx_column (column1, column2))可显著提升去重效率。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/14072.html发布于:2026-08-31



![cmd如何退出mysql命令,[MySQL命令行退出操作指南]](https://www.html4.cn/zb_users/upload/zltheme_20260831/26aa5a28a34798cbd6de18a56eef65e7.jpg)

