MySQL中高效去除重复数据的实用方法
在MySQL中去除重复数据,可以通过使用 DISTINCT 关键字、GROUP BY 子句或 ROW_NUMBER() 窗口函数等方法实现,具体选择取决于场景需求,下面将详细介绍这些方法的操作步骤及适用情况。

使用 DISTINCT 关键字
DISTINCT 适用于快速去除查询结果中的重复行,尤其适合单列或多列组合的去重。
SELECT DISTINCT column1, column2 FROM table_name;
这会返回 column1 和 column2 组合的唯一值,但不会删除原表中的数据,仅影响查询结果。
利用 GROUP BY 进行去重
通过 GROUP BY 对指定列分组,可配合聚合函数(如 MAX、MIN)保留所需数据,保留每组中 id 最大的记录:
SELECT * FROM table_name GROUP BY column1, column2;
注意:在严格模式下,GROUP BY 需与聚合函数结合使用,否则可能返回不确定行。
使用 ROW_NUMBER() 窗口函数
适用于复杂去重场景,如保留重复数据中的特定行(如最新记录),示例:
DELETE FROM table_name
WHERE id IN (
SELECT id FROM (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id DESC) AS rn
FROM table_name
) t WHERE rn > 1
);
此方法先为每组重复数据编号,再删除编号大于1的行,可精准删除表中重复数据。
创建临时表或唯一索引
若需永久删除重复数据,可创建临时表存储唯一值后替换原表:
CREATE TABLE new_table AS SELECT DISTINCT * FROM old_table; DROP TABLE old_table; RENAME TABLE new_table TO old_table;
或添加唯一索引阻止未来重复数据插入:
ALTER TABLE table_name ADD UNIQUE INDEX idx_unique (column1, column2);
注意事项
- 备份数据:执行删除操作前务必备份原表,避免数据丢失。
- 性能考量:大数据表去重时,建议在低峰期操作,并使用索引优化查询。
- 业务逻辑确认:去除重复前需明确业务规则,确保保留的数据符合需求。
通过以上方法,可灵活应对MySQL中的数据重复问题,提升数据质量与查询效率。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/6595.html发布于:2026-07-24





