INSERT INTO SELECT时自增Id不连续

MySQL在执行批量插入时,会预先分配自增ID,例如第一次分配1个,第二次分配2个,依此类推。当所需ID超过已分配数量时,才会再次申请。例如,插入4条记录时,会分别分配1、2、4个ID,直到满足需求,之后的插入将从下一个未使用的ID开始。
摘要由CSDN通过智能技术生成

一、表结构

 

二、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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值