在我们日常使用Mysql中,如果不是特殊的业务需要,一般我们都会使用自增主键,自增主键的好处可以在插入的时候尽量地减少页分割,增加Mysql的写入效率。我们有时候就会发现,自增主键并不是连续递增的,为什么有时候会出现自增主键的空洞呢?

即便是使用自增主键的表,也是可以指定主键的。假设当前的自增主键是X,我们指定的主键是Y,假如Y

第二种出现间隔的原因,是因为Mysql插入失败了。首先我们要了解自增主键的原理,当我们向一张主键自增的表中插入数据的时候,如果Mysql发现你没有带主键,就会去自增表里面申请一个主键,当申请成功之后,就会拿着这个主键去做真实的Insert操作,但是在这个过程中,Insert可能会失败,例如主键或者唯一键冲突等。或者出现事务回滚,Mysql是不会回滚对应的自增主键的值的。为什么Mysql会这么做呢?这个并不难理解,因为当我们申请主键的时候,其他事务也会申请主键,假如事务发生回滚的时候,是否还要考虑其他事务的状态呢?这是个非常复杂又消耗性能的问题,另一方面,自增主键的最大作用是避免页分割,我们只需要数据是递增而无需连续。

第三种出现间隔的原因,是Mysql的主键申请机制。假如我们是批量插入的,那么批量申请多个主键的效率会比逐个申请要快得多得多。按道理来说,Mysql是有多少条新数据就申请多少个自增主键的,但是有一些情况,Mysql并不知道最终插入的数据有多少,例如Insert...Select语句。Mysql的申请策略是使用倍增法去申请,所以,假如Insert...Select的结果是4条数据,那么最终会申请1+2+4=7个主键值,就会有3个浪费了。

好了,今天我们了解了Mysql数据出现空洞的几个原因,学习到了么?欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)

主键冲突报什么代码_程序员经典面试题,Mysql自增主键为什么不连续相关推荐

  1. mysql 自增 不是主键_程序员经典面试题,MySQL自增主键为什么不连续

    在我们日常使用Mysql中,如果不是特殊的业务需要,一般我们都会使用自增主键,自增主键的好处可以在插入的时候尽量地减少页分割,增加Mysql的写入效率.我们有时候就会发现,自增主键并不是连续递增的,为 ...

  2. mysql会对同时读取加锁吗_程序员经典面试题,MySQL并发读写的时候,都是需要加锁的么?...

    这是一道经典的程序员面试题,在Mysql中,如果有多个事务同时访问同一行数据,那么需要加锁么?我们都知道,在Mysql中有行锁,如果有多个事务同时修改同一行数据,那么需要加锁来防止并发问题.那么,如果 ...

  3. 小郭经典mysql面试题资料_程序员经典面试题,Mysql是如何完成一次数据查询的...

    数据库,大家都不陌生,这是程序员的基本技能了.当然,我们更多时候只是去了解如何使用数据库,而对数据库一些底层原理却比较陌生,今天我们来了解一下,一条数据库查询语句的取经之路. 基本分层 个人认为,My ...

  4. java重定向代码_Java程序员经典面试题集大全 (三十四)

    341. Servlet API中forward() 与redirect()的区别? 答:为实现程序的模块化,就需要保证在不同的Servlet之间可以相互跳转,而Servlet中主要有两种实现跳转的方 ...

  5. 增删改查java代码_程序员:听说你正在为天天写增删改查代码而烦恼

    有相当多的一部分程序员一直都只接触业余应用的功能,天天写业务代码的程序员也被戏称为CURD程序员,CURD就是增(create).改(update).查(read).删(delete)的意思. CUR ...

  6. java浪漫代码_程序员表白代码,用过的人都找到了对象...

    在情人节送给自己的女朋友玫瑰花, 对于程序员来说是不是太普通了呢? 为什么不试试让情人节变得更特别一些呢? 作为一名程序员, 可以用自己的技术创造出不一样的浪漫! 让你的女朋友眼前一亮,印象深刻. 这 ...

  7. ms查约束具体代码_程序员写代码之前应该做的5件事,看完编程效率瞬间提升

    作者:borisyang,腾讯 WXG 应用开发工程师 作为程序员,刚刚开始学会写代码,常常是接过需求就开始撸代码.有时候发现,写完代码,需求变了.更多时候,觉得写业务代码枯燥无聊,没有技术含量.另外 ...

  8. 先来先服务算法代码_程序员算法与数据结构基础中的基础,栈与递归

    在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...

  9. 不认识java代码_程序员进阶:优雅的代码对于一个架构师的重要性

    lison:复旦大学工程硕士,专注技术十年,产品控.代码控,拥有丰富的项目经验,主持研发了多个成功上线的大型互联网项目.热爱互联网,热衷于各种web技术,精通JAVA.J2EE和前端开发,擅长互联网高 ...

最新文章

  1. oracle spm buffer get比较过程,Oracle 11g 新特性 -- SQL Plan Management 示例
  2. python最大公约数
  3. Cacti 每日导出图形及流量报表 [未完成]
  4. 数据库-查看数据库-创建数数据库
  5. Java学习笔记之基础应用(2015.3.21)
  6. AFNetworking源码学习
  7. oracle 天转换成月函数_oracle中to_date详细用法示例(oracle日期格式转换)
  8. 小tips:JS之浅拷贝与深拷贝
  9. Boyer-Moore-Horspool-Sunday 算法
  10. 第四章 数学规划模型
  11. 数字图像处理 matlab 报告总结,matlab 数字图像处理实验报告(五份)
  12. 颜晖c语言设计答案,c语言程序设计 (何钦铭 颜晖 著)课后习题答案
  13. Win10下如何清理优化C盘
  14. 安卓测试皮肤的软件有哪些,什么软件可以测肤色 有哪些检测皮肤的app好用为什么...
  15. 时代当歌,懂行为剑,英雄正少年
  16. android获取apk版本号,android 获取apk的版本信息
  17. VTK源码阅读--VTK里的智能指针vtkSmartPointer类
  18. 优秀员工的十二种品质 - 马云在上海演讲说的话
  19. JS点击事件和延迟处理
  20. Mysql中按某一字段去重,并查询去重后的所有字段

热门文章

  1. 清华计算机系科学博士毕业论文要求,清华大学博士毕业要求
  2. 解决Ubuntu20.04网络配置的问题
  3. [书]深入分析Linux内核源代码
  4. 笔试回忆-CVTE广州视源-嵌入式应用开发实习生-20180314
  5. Linux C小项目 —— 简单的web服务器
  6. Linux C 进程间的IPC通信 之 消息队列(2)
  7. 洗衣机洗涤部分c语言程序,51单片机洗衣机控制板及C语言程序
  8. xcode添加符号断点
  9. 解决Hive动态分区小文件过多问题
  10. Python入门程序【八】