SQL删除重复数据怎么做_安全去重方案讲解【教学】

#技术教程 发布时间: 2025-12-19
SQL删除重复数据应先精准识别待删行再操作,推荐用ROW_NUMBER()窗口函数标记重复行并删rn>1的记录,务必先备份、再事务执行,并按业务规则(如保留最新或有效状态)决定保留逻辑。

SQL删除重复数据,核心思路是保留一条,删掉其余重复项。关键不在于“怎么删”,而在于“怎么准确识别哪些该删、哪些该留”。盲目用 DELETE + GROUP BY 或直接删全表重插,风险极高。下面给出几种安全、可验证、生产环境可用的方案。

先查再删:用窗口函数精准定位重复行

这是最推荐的入门方式,逻辑清晰、不易误删。利用 ROW_NUMBER() 给每组重复数据编号,只删编号 > 1 的行。

假设表 user_infoemail 字段重复,想按 id 升序保留最早的一条:

DELETE FROM user_info 
WHERE id NOT IN (
  SELECT MIN(id) 
  FROM user_info 
  GROUP BY email
);

或者更直观的窗口函数写法(MySQL 8.0+ / PostgreSQL / SQL Server):

WITH dup AS (
  SELECT id, 
         ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
  FROM user_info
)
DELETE FROM user_info 
WHERE id IN (SELECT id FROM dup WHERE rn > 1);

✅ 优点:语义明确,支持多字段去重(如 PARTITION BY email, phone),可先用 SELECT 预览要删的行。

备份+事务:删除前必做的两道保险

任何删除操作上线前,必须做这两件事:

  • 创建临时备份表CREATE TABLE user_info_bak AS SELECT * FROM user_info;
  • 在事务中执行删除BEGIN; DELETE ... ; SELECT COUNT(*) FROM user_info; -- 确认数量合理后 COMMIT;,出错立刻 ROLLBACK;

⚠️ 切勿在没备份、没事务的情况下直接跑 DELETE。线上表一旦误删,恢复成本极高。

按业务规则选“保留哪一条”

不是所有重复都该按 ID 最小保留。常见业务逻辑:

  • 保留最新录入的:用 ORDER BY created_at DESC
  • 保留状态更优的(如 status = 'active' 优先):在窗口函数中用 CASE 排序,例如 ORDER BY CASE WHEN status='active' THEN 0 ELSE 1 END, created_at DESC
  • 多个字段共同决定唯一性:把 PARTITION BY 后面写全,如 PARTITION BY email, phone, name

不看业务含义硬去重,可能把有效数据当重复删掉——比如同一用户换绑手机号,旧记录和新记录 email 相同但 phone 不同,本质不是重复。

大表优化:避免全表扫描和锁表太久

千万级表直接 DELETE 可能锁表几分钟,影响业务。可分批删除:

-- MySQL 示例:每次删 5000 行,加 LIMIT 防卡死
DELETE FROM user_info 
WHERE id IN (
  SELECT id FROM (
    SELECT id FROM user_info 
    WHERE email IN (
      SELECT email FROM user_info 
      GROUP BY email HAVING COUNT(*) > 1
    )
    AND id NOT IN (
      SELECT MIN(id) FROM user_info 
      GROUP BY email
    )
    LIMIT 5000
  ) t
);

同时确保 emailid 字段有索引,否则子查询会极慢。

不复杂但容易忽略。




上一篇 : 苹果手机如何设置不同联系人不同铃声_苹果手机联系人铃声设置

下一篇 : opp官网手机官网首页_OPPO中国官网手机产品入口网址

推荐阅读

电话:400 76543 55
邮箱:915688610@qq.com
品牌营销
客服微信
搜索营销
公众号
©  丽景创新 版权所有 赣ICP备2024032158号 
宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 恩施州毯滚百货有限公司 恩施州毯滚百货有限公司 襄阳市蜂欢商贸有限公司 襄阳市蜂欢商贸有限公司 恩施州换冯百货有限公司 恩施州换冯百货有限公司 恩施州健提百货有限公司 恩施州健提百货有限公司 西安益零商贸有限公司 西安益零商贸有限公司 南奥教育 南奥教育 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南奥教育网 南奥教育网 南奥教育网 南奥教育网 南奥学习网 南奥学习网 南奥学习网 南奥学习网 南奥教育 南奥教育 南奥留学记 南奥留学记 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 广照天下广告 广照天下广告 广照天下广告策划 广照天下广告策划 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下广告策划 广照天下广告策划 广照天下广告策划 广照天下广告策划 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司
品牌营销
专业SEO优化
添加左侧专家微信
获取产品详细报价方案