mysql报错 Duplicate entry

在MySQL中,当你尝试执行插入(INSERT)或更新(UPDATE)操作时,如果目标表中存在唯一索引(包括主键索引、唯一约束索引等),并且你要插入或更新的数据在该索引列上的值与表中已有的值重复,这时就会触发“Duplicate entry”错误。

具体来说,以下几种情况会导致“Duplicate entry”错误:

  1. 主键索引重复:尝试插入的记录的主键值与表中已有的主键值相同。
  2. 唯一索引重复:如果表中有一个或多个列被定义为具有唯一约束的唯一索引,而你尝试插入的数据在这些列上的值与现有记录冲突,也会触发错误。
  3. 复合唯一索引重复:当一个索引包含多个列,称为复合索引,并且定义为唯一时,只有当这些列的值组合完全相同时才视为重复。如果插入的数据在这些列的值组合上与现有记录匹配,也会报错。
  4. 插入或更新操作触发的唯一性检查失败:在执行INSERTUPDATE时,即使你没有直接修改唯一索引列,但如果操作间接导致了唯一性约束被违背(比如,更新其他列触发了唯一索引列的级联更新),同样会遇到“Duplicate entry”。

建表:

CREATE TABLE `ent_test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主建',
  `pripid` char(32) NOT NULL COMMENT '主体身份代码',
  `ent_name` varchar(200) NOT NULL DEFAULT '' COMMENT '企业名称',
  `ent_code` char(18) NOT NULL DEFAULT '' COMMENT '统一社会信用代码',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间戳',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_pripid` (`pripid`),
  UNIQUE KEY `idx_ent_code_ent_name` (`ent_code`,`ent_name`),
  KEY `idx_ent_code` (`ent_code`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='主体表'


INSERT INTO ent_test (id, pripid, ent_name, ent_code, create_time, update_at) VALUES (1, '111', '企业1', 'A', '2024-06-08 07:06:04', '2024-06-08 07:19:29');
INSERT INTO ent_test (id, pripid, ent_name, ent_code, create_time, update_at) VALUES (2, '222', '企业2', 'B', '2024-06-08 07:06:04', '2024-06-08 07:19:29');
INSERT INTO ent_test (id, pripid, ent_name, ent_code, create_time, update_at) VALUES (3, '333', '企业3', 'C', '2024-06-08 07:10:21', '2024-06-08 07:19:29');

测试数据:

主键索引
# [23000][1062] Duplicate entry '1' for key 'PRIMARY'
insert into ent_test(id,pripid,ent_name,ent_code) values (1,'4','企业4','D')


唯一键索引
# [23000][1062] Duplicate entry '111' for key 'idx_pripid'
insert into ent_test(id,pripid,ent_name,ent_code) values (4,'111','企业4','D')


复合索引
# [23000][1062] Duplicate entry 'A-企业1' for key 'idx_ent_code_ent_name'
insert into ent_test(id,pripid,ent_name,ent_code) values (4,'444','企业1','A')

 加入ignore,只有最后一条数据没有触发索引报错

insert ignore into ent_test(id,pripid,ent_name,ent_code) values (1,'4','企业4','D');
insert ignore into ent_test(id,pripid,ent_name,ent_code) values (4,'444','企业1','A');
insert ignore into ent_test(id,pripid,ent_name,ent_code) values (4,'444','企业2','A');

相关推荐

  1. Mysql处理

    2024-06-08 12:50:01       64 阅读
  2. spark 写入 mysql

    2024-06-08 12:50:01       43 阅读
  3. mysql日志查看

    2024-06-08 12:50:01       45 阅读
  4. MySQL | 加索引

    2024-06-08 12:50:01       36 阅读
  5. MySQL通过mysql命令连接sock

    2024-06-08 12:50:01       55 阅读
  6. Mysql:too many connections

    2024-06-08 12:50:01       49 阅读
  7. MySQL主从异常1872

    2024-06-08 12:50:01       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 12:50:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 12:50:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 12:50:01       82 阅读
  4. Python语言-面向对象

    2024-06-08 12:50:01       91 阅读

热门阅读

  1. 怎么在stm32上跑自己的神经网络

    2024-06-08 12:50:01       29 阅读
  2. 视觉SLAM14精讲——相机与图像3.1

    2024-06-08 12:50:01       31 阅读
  3. 数据库连接池的概念和原理

    2024-06-08 12:50:01       33 阅读
  4. 笔记:DST与HPPC测试方法

    2024-06-08 12:50:01       24 阅读
  5. 深度解读ChatGPT基本原理

    2024-06-08 12:50:01       26 阅读
  6. 骑砍2霸主MOD开发(11)-瓦兰迪亚火骑兵

    2024-06-08 12:50:01       30 阅读
  7. C#面:Server.UrlEncode、HttpUtility.UrlDecode的区别

    2024-06-08 12:50:01       24 阅读