MySQL如何高效去除重复行:方法与实战详解
在MySQL中,使用DISTINCT关键字或GROUP BY子句可以快速去除查询结果中的重复行,而若需直接删除表中的重复数据,则可结合ROW_NUMBER()窗口函数或创建临时表实现,下面将详细展开具体操作:

  1. 使用DISTINCT关键字
    在查询语句中直接添加DISTINCT,可返回唯一值。

    mysql 如何去掉重复行,MySQL高效去除重复行方法

    SELECT DISTINCT column1, column2 FROM table_name;

    适用于简单去重,但仅针对查询结果,不改变原表数据

  2. 利用GROUP BY分组去重
    通过分组聚合实现去重,常配合聚合函数使用:

    SELECT column1, column2 FROM table_name GROUP BY column1, column2;

    DISTINCT效果类似,但更灵活,可在分组后进行统计计算。

  3. 删除表中重复数据(保留单条记录)
    使用窗口函数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排序),安全删除多余重复行

  4. 创建临时表去重
    适用于所有MySQL版本,通过复制唯一数据到新表后替换原表:

    CREATE TABLE new_table AS SELECT DISTINCT * FROM old_table;
    RENAME TABLE old_table TO backup_table, new_table TO old_table;

    注意备份原表,避免数据丢失。

  5. 使用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最小的记录,删除其他重复行。

总结建议

  • 查询去重优先选DISTINCTGROUP BY
  • 删除数据时推荐用ROW_NUMBER(),操作前务必备份数据
  • 对大型表操作时,通过添加索引(如ALTER TABLE table_name ADD INDEX idx_column (column1, column2))可显著提升去重效率。

未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网

原文地址:https://www.html4.cn/14072.html发布于:2026-08-31