INSERT INTO SELECT时自增Id不连续

一、表结构

 

二、MySQL提供了批量申请自增id的策略

  1. 语句执行过程中,第一次申请自增id,会分配1个(2的0次方)
  2. 1个用完以后,这个语句第二次申请自增id,会分配2个(2的1次方)
  3. 2个用完以后,还是这个语句,第三次申请自增id,会分配4个(2的2次方)

 

三、举例

例子一:

INSERT INTO user (name, age) SELECT name, age from user01 limit 4;

第一次申请自增id会分配1个,1 < 4

第二次申请自增id会分配2个,1+2 < 4

第三次申请自增id会分配4个,1+2+4 > 4,终止

此时1 + 2 + 4 = 7 > 4,申请自增id的操作就会停止。
因为已经申请了7个id了,所以当我们执行第二条SQL语句时,插入数据的id就会从8开始,此时AUTO_INCREMENT的值也会是8

例子二:

INSERT INTO user (name, age) SELECT name, age from user01 limit 8;

第一次申请自增id会分配1个,1 < 8

第二次申请自增id会分配2个,1+2 < 8

第三次申请自增id会分配4个,1+2+4 < 8

第四次申请自增id会分配4个,1+2+4+8 > 8

此时1 + 2 + 4 +8= 15 > 8,申请自增id的操作就会停止。
因为已经申请了15个id了,所以当我们执行第二条SQL语句时,插入数据的id就会从16开始,此时AUTO_INCREMENT的值也会是16

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值