数据导入提示“Duplicate entry”主键冲突?应如何处理已有数据?
1. 主键冲突原因分析
- 场景:导入数据时,某条记录的 PRIMARY KEY 或 UNIQUE KEY 与现有数据重复。
- 典型报错:
bash
ERROR 1062 (23000): Duplicate entry '123' for key 'PRIMARY'
2. 解决方案对比
方法 | 操作步骤 | 适用场景 |
---|---|---|
跳过重复项 | 使用 INSERT IGNORE 或 LOAD DATA INFILE... IGNORE |
重复数据可丢弃 |
替换旧数据 | 用 REPLACE INTO 或 ON DUPLICATE KEY UPDATE |
需要覆盖历史记录 |
先删除再导入 | 执行 DELETE FROM table WHERE id IN (...) 清除冲突记录 |
需精准控制删除范围 |
临时禁用约束 | 设置 SET FOREIGN_KEY_CHECKS=0 ,导入后再恢复 |
外键依赖复杂时 |
sql
-- 跳过重复记录 INSERT IGNORE INTO users SELECT * FROM temp_users; -- 更新重复记录 INSERT INTO users (id, name) VALUES (1, 'John') ON DUPLICATE KEY UPDATE name = VALUES(name);
更新时间:2025-06-21 23:19:23