mysql数据库id自增不连续_数据库自增主键为什么不连续

aa63b2922731476a5c86c513f385a499.png

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

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

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

好了,今天我们了解了Mysql数据出现空洞的几个原因,学习到了么?欢迎大家关注我,共同学习,共同进步。

数据库是一个 单位或是一个应用领域的通用数据处理系统,它存储的是属于企业和事业部门、 团体和个人的有关数据的 集合。数据库中的数据是从全局观点出发建立的,按一定的 数据模型进行组织、描述和存储。其结构基于数据间的自然联系,从而可提供一切必要的存取 路径,且数据不再针对某一应用,而是面向全组织,具有整体的结构化特征。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值