MySQL INSERT INTO SELECT时自增Id不连续问题及解决

 更新时间:2023年12月08日 16:10:19   作者:shyの同学  
这篇文章主要介绍了INSERT INTO SELECT时自增Id不连续问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.问题

最近笔者接到一个新的开发需求:

将多张相同字段的MySQL数据表合并为一张,一听我就乐了,这不就是几行INSERT INTO SELECT FROM…的事儿嘛。

在痛快的执行完准备交付的时候,发现了一个问题:

\qquad 合并好的数据表中的id居然不是连续自增的,也就是说合并的几张数据表中每两张表的Id中间没有续上。

合并前的数据是长这样的

合并好之后的数据是长这样的

可以发现4下来就是8了,11下来是15

2.分析

通过仔细的研究之后发现,对于批量插入数据语句,MySQL提供了批量申请自增id的策略:

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

也就是说当我执行下面这条语句时(user01一共四条数据)

INSERT INTO user (name, age) SELECT name, age from user01;
  • 第一次申请自增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

3.解决方案

笔者采用的操作是在Navicat中修改自动递增的值来保证它的id连续:

直接将自动递增的值删除,然后保存

当然,这个理论上是不能解决根本问题的。

4.结论

这么设计的主要原因是为了提升性能,所以自增id只保证是递增的,但不保证是连续的!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL DQL从入门到精通

    MySQL DQL从入门到精通

    通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQL DQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小编一起看看吧
    2025-06-06
  • 浅谈MySQL聚簇索引

    浅谈MySQL聚簇索引

    数据库的索引从不同的角度可以划分成不同的类型,聚簇索引便是其中一种。聚簇索引并不是一种单独的索引类型,而是一种数据的存储方式。本文详细介绍了MySQL的聚簇索引,感兴趣的同学可以参考阅读
    2023-04-04
  • phpmyadmin报错:#2003 无法登录 MySQL服务器的解决方法

    phpmyadmin报错:#2003 无法登录 MySQL服务器的解决方法

    通过phpmyadmin连接mysql数据库时提示:“2003 无法登录 MySQL服务器”。。。很明显这是没有启动mysql服务,右击我的电脑-管理-找到服务,找到mysql启动一下
    2012-04-04
  • 详解mysql8.018在linux上安装与配置过程

    详解mysql8.018在linux上安装与配置过程

    这篇文章主要介绍了mysql8.018在linux上安装与配置过程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • MySQL的联表查询实现

    MySQL的联表查询实现

    数据通常分布在多个表中,为了获取全面的信息,需要进行联表查询,本文主要介绍了MySQL的联表查询实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • 详解一条sql语句在mysql中是如何执行的

    详解一条sql语句在mysql中是如何执行的

    这篇文章主要介绍了一条sql语句在mysql中是如何执行的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • MySQL 查看事务和锁情况的常用语句分享

    MySQL 查看事务和锁情况的常用语句分享

    这篇文章主要介绍了MySQL 查看事务和锁情况的常用语句分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • mysql 5.7.27 安装配置方法图文教程

    mysql 5.7.27 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.27 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • win10 下安装 mysql 5.7.14 详细图文教程

    win10 下安装 mysql 5.7.14 详细图文教程

    本文通过文字和图片相结合的形式给大家介绍了win10 下安装 mysql 5.7.14的教程的,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • MySQL实现索引下推的示例代码

    MySQL实现索引下推的示例代码

    索引下推是一种数据库查询优化技术,通过在索引扫描阶段应用过滤条件,减少回表操作,本文主要介绍了MySQL实现索引下推的示例代码,感兴趣的可以了解一下
    2025-02-02

最新评论