一、重复数据的产生与隐患
重复数据通常源于:
- 缺乏数据库约束
- 并发写入冲突
- 数据导入差错
这会导致查询结果失真、存储空间浪费和性能下降。
二、预防重复数据的三大方法
- INSERT IGNORE → 忽略重复
INSERT IGNORE INTO users (username, email) VALUES ('john', 'john@example.com');
- REPLACE INTO → 替换重复
REPLACE INTO users (id, username) VALUES (1, 'new_john');
- ON DUPLICATE KEY UPDATE → 更新重复
INSERT INTO users (id, username)
VALUES (1, 'john_doe')
ON DUPLICATE KEY UPDATE username = 'john_doe';
三、查询去重技巧
-- 使用DISTINCT快速去重查询
SELECT DISTINCT username, email FROM users;
-- 使用GROUP BY进行分组去重
SELECT username, COUNT(*)
FROM users
GROUP BY username
HAVING COUNT(*) > 1;
四、实战示例:清理现存重复数据
-- 创建临时表存储要保留的ID
CREATE TEMPORARY TABLE tmp AS
SELECT MIN(id) as keep_id
FROM users
GROUP BY username
HAVING COUNT(*) > 1;
-- 删除不在保留列表中的重复数据
DELETE FROM users
WHERE id NOT IN (SELECT keep_id FROM tmp);
最佳实践:建议在业务层面与数据库层面同时设防,建立唯一索引是最有效的预防措施:
ALTER TABLE users ADD UNIQUE INDEX idx_unique_username (username);
掌握这些技巧,让你的数据库告别重复数据困扰!

被折叠的 条评论
为什么被折叠?



