mysql自增主键不连续情况分析

1.唯一键冲突
比如increnment_test中已经存在了co1为3的记录,当再插入col1为3的记录时,就会出现主键不唯一错误,但此时自增主键已经+1,所以会发生主键不连续情况

DROP TABLE IF EXISTS `increnment_test`;
CREATE TABLE `increnment_test`  (`id` int(0) NOT NULL AUTO_INCREMENT,`col1` int(0) NULL DEFAULT NULL,`col2` int(0) NULL DEFAULT NULL,`col3` int(0) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uni_col1`(`col1`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
INSERT INTO `mytest`.`increnment_test`(`id`, `col1`, `col2`, `col3`) VALUES (1, 1, 1, 1);
INSERT INTO `mytest`.`increnment_test`(`id`, `col1`, `col2`, `col3`) VALUES (2, 2, 2, 2);
INSERT INTO `mytest`.`increnment_test`(`id`, `col1`, `col2`, `col3`) VALUES (3, 3, 3, 3);INSERT INTO `mytest`.`increnment_test`(`col1`, `col2`, `col3`) VALUES (3, 3, 3);
INSERT INTO `mytest`.`increnment_test`(`col1`, `col2`, `col3`) VALUES (3, 3, 3);INSERT INTO `mytest`.`increnment_test`(`col1`, `col2`, `col3`) VALUES (4, 4, 4);

 

 

2.事务回滚
开启一个事务,插入col1为6的记录,然后进行回滚.回滚后重新插入col1为6的记录,此时col1为6的记录,对应的id值为7,原理同唯一键冲突一致

BEGIN;
INSERT INTO `mytest`.`increnment_test`(`col1`, `col2`, `col3`) VALUES (6,6,6);
ROLLBACK;BEGIN;
INSERT INTO `mytest`.`increnment_test`(`col1`, `col2`, `col3`) VALUES (6,6,6);
COMMIT;

 

 

3.批量插入语句

对于批量插入数据的语句,mysql有一个批量申请自增id 的策略,同一个语句去申请自增id,每次申请到的自增id个数都是上一次的两倍

即, 第一次申请会分配1个id
      第二次申请会分配2个id
      第三次申请会分配4个id

因批量申请策略的存在,所以也会造成自增主键不连续

DROP TABLE IF EXISTS `increnment_test2`;
CREATE TABLE `increnment_test2`  (`id` int(0) NOT NULL AUTO_INCREMENT,`col1` int(0) NULL DEFAULT NULL,`col2` int(0) NULL DEFAULT NULL,`col3` int(0) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uni_col1`(`col1`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;INSERT INTO increnment_test2(col1,col2,col3) 
SELECT col1,col2,col3 FROM increnment_test;INSERT INTO increnment_test2(col1,col2,col3) VALUES(8,8,8);SELECT * FROM increnment_test2;

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/59049.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频技术开发周刊 | 305

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 大神回归学界:何恺明宣布加入 MIT 「作为一位 FAIR 研究科学家,我将于 2024 年加入麻省理工学院(MIT)电气工程与计算机科学…

适配器模式(C++)

定义 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 应用场景 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象 ”放在新的环境中应用,但是新环境要求…

【iOS】RunLoop

前言-什么是RunLoop? 什么是RunLoop? 跑圈?字面上理解确实是这样的。 Apple官方文档这样解释RunLoop RunLoop是与线程息息相关的基本结构的一部分。RunLoop是一个调度任务和处理任务的事件循环。RunLoop的目的是为了在有工作的时候让线程忙起来&#…

【如何构建自己的基于Arduino的Scara 机器人】

【如何构建自己的基于Arduino的Scara 机器人】 1. 概述2. Scara机器人3D模型3. 3D打印机器人零件4. 组装机器人5. SCARA机器人电路图6. 完成装配7. SCARA机器人的工作原理8. 对 SCARA 机器人进行编程 – Arduino 和处理代码9. 总结在本教程中,我们将学习如何构建基于 Arduino …

小红书数据分析丨现实版模拟人生,这届网友热衷于“云开店”?

近期,小红书出现的一个神秘的热心群体,他们经常活跃在各种小店店主发布的求助帖评论区中,积极地帮助店主出谋划策,寻找小店经营的优化之道,成功帮助小店成功转亏为盈!江湖人称一一云股东。小红书话题#爱上帮…

01《Detecting Software Attacks on Embedded IoT Devices》随笔

2023.08.05 今天读的是一篇博士论文 论文传送门:Detecting Software Attacks on Embedded IoT Devices 看了很长时间,发现有一百多页,没看完,没看到怎么实现的。 摘要 联网设备的增加使得嵌入式设备成为各种网络攻击的诱人目标&…

Netty自定义编码解码器

上次通信的时候用的是自带的编解码器&#xff0c;今天自己实现一下自定义的。 1、自定义一下协议 //协议类 Data public class Protocol<T> implements Serializable {private Long id System.currentTimeMillis();private short msgType;// 假设1为请求 2为响应privat…

数据结构---跳表

目录标题 为什么会有跳表跳表的原理跳表的模拟实现准备工作find函数insert函数erase函数 测试效率比较 为什么会有跳表 在前面的学习过程中我们学习过链表这个容器&#xff0c;这个容器在头部和尾部插入数据的时间复杂度为O(1)&#xff0c;但是该容器存在一个缺陷就是不管数据…

【算法|数组】手撕经典二分法

算法|数组——二分查找 文章目录 算法|数组——二分查找引言二分查找左闭右闭写法左闭右开写法 总结 引言 首先学习这个算法之前需要了解数组知识&#xff1a;数组。 大概介绍以下&#xff1a; 数组是存储在连续内存空间上的相同类型数据的集合。数组下标都是从0开始。数组在…

第17章-Spring AOP经典应用场景

文章目录 一、日志处理二、事务控制三、参数校验四、自定义注解五、AOP 方法失效问题1. ApplicationContext2. AopContext3. 注入自身 六、附录1. 示例代码 AOP 提供了一种面向切面操作的扩展机制&#xff0c;通常这些操作是与业务无关的&#xff0c;在实际应用中&#xff0c;可…

2.虚拟机开启kali_linux

首先你应该搞一个虚拟机&#xff0c;搞虚拟机可以看一下这个 附录三 虚拟机的使用_Suyuoa的博客-CSDN博客 然后你需要搞一个 kali linux的镜像 Get Kali | Kali Linux 镜像下载好之后解压&#xff0c;你会得到一个文件夹包含下面这些文件 之后打开VMware&#xff0c;点击打开虚…

SpringBoot配置多数据源

一、pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring…