MySQL错误1062是指ERROR 1062 (23000): Duplicate entry,即违反了字段的唯一约束。在应用程序与数据库交互的过程中,如果执行了插入或更新操作,而目标表中设置了主键或唯一索引的列出现了重复值,MySQL就会抛出该错误。它虽然常被叫做连接错误,但实质是SQL执行阶段的约束冲突。

错误1062的常见触发场景
下面列出几种最容易遇到错误1062的情况:
- 向带有自增主键的表手动插入已存在的主键值
- 业务代码未做幂等处理,重复提交导致唯一索引列值冲突
- 数据迁移时源表与目标表唯一约束不一致
如何排查错误1062
首先应查看报错信息中的Duplicate entry后面的值以及对应的键名,例如:
Duplicate entry 'test@ipipp.com' for key 'email'
这说明email列的唯一索引中已存在test@ipipp.com。可通过以下语句确认:
SELECT * FROM user WHERE email = 'test@ipipp.com';
解决错误1062的几种方法
方法一:使用INSERT IGNORE
如果重复时希望直接跳过而非报错,可以用INSERT IGNORE:
INSERT IGNORE INTO user (name, email) VALUES ('张三', 'test@ipipp.com');
方法二:使用ON DUPLICATE KEY UPDATE
当遇到重复时改为更新已有记录:
INSERT INTO user (name, email) VALUES ('张三', 'test@ipipp.com')
ON DUPLICATE KEY UPDATE name = '张三';
方法三:先查询后插入
在业务层先判断是否存在,再决定是否写入:
String sql = "SELECT COUNT(*) FROM user WHERE email = ?"; // 执行查询,若结果为0再插入,避免触发错误1062
临时处理建议
若是批量导数据,可临时关闭唯一检查(仅限非生产环境谨慎使用):
SET SESSION unique_checks = 0; -- 执行导入 SET SESSION unique_checks = 1;
理解错误1062的本质并选择合适处理方式,可以有效保障数据一致性与服务稳定性。