Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

怎样找出并安全清理重复记录?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

先明确哪些列定义重复,按这些列分组找重复。再确定稳定的保留规则,例如保留最小主键。先用查询预览受影响记录,再分批或在可控事务内删除。

讲清原理

同名不一定代表同一人。NULL 和排序规则会影响分组及匹配,删除连接要与选重复时的规则一致。清理后应补能表达业务唯一性的约束。

例子与易错点

例如邮箱非空且约定相同邮箱只保留最早记录,可以按邮箱匹配并保留较小主键。对生产数据先核对外键依赖和受影响数量。

演示表中邮箱非空。先找重复邮箱,再保留较小主键。

CREATE TABLE duplicates (id INT PRIMARY KEY, email VARCHAR(100) NOT NULL);
INSERT INTO duplicates VALUES (1, 'a@example.test'), (2, 'a@example.test'), (3, 'b@example.test');
SELECT email, COUNT(*) FROM duplicates GROUP BY email HAVING COUNT(*) > 1;
DELETE d FROM duplicates AS d
JOIN duplicates AS kept ON kept.email = d.email AND kept.id < d.id;
SELECT id FROM duplicates ORDER BY id;

相关题 · 第 89 题

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。