1. DELETE语句基础与应用场景
SQL中的DELETE语句是数据操作语言(DML)的重要组成部分,用于从数据库表中删除记录。与TRUNCATE和DROP不同,DELETE是事务安全的操作,可以通过WHERE子句精确控制要删除的记录范围。
DELETE语句的基本语法结构如下:
sql复制DELETE FROM table_name
WHERE condition;
在实际业务场景中,DELETE通常用于以下几种情况:
- 清理过期或无效数据
- 删除重复记录(如本文案例)
- 执行级联删除操作
- 数据迁移前的准备工作
重要提示:执行DELETE前务必确认WHERE条件准确,建议先使用SELECT语句测试条件是否匹配预期记录。生产环境中建议在事务中执行DELETE,以便出错时可以回滚。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 重复数据删除问题分析
2.1 问题描述与数据结构
我们有一个简单的Person表,结构如下:
| 列名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,具有唯一值 |
| varchar | 电子邮件地址,不区分大小写 |
业务需求是删除所有重复的电子邮件,只保留具有最小id的唯一电子邮件记录。例如:
删除前数据:
| id | |
|---|---|
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
预期结果:
| id | |
|---|---|
| 1 | john@example.com |
| 2 | bob@example.com |
2.2 解决方案设计思路
要实现这个需求,我们需要解决两个核心问题:
- 如何识别重复的电子邮件记录
- 如何确定要保留哪条记录(最小id)
常见解决方案有两种:
- 自连接法:通过表自连接比较记录间的id和email
- 子查询法:先找出每组重复email中的最小id,然后删除不在这个集合中的记录
