mysql自增长ID字段丢失问题及解决

 更新时间:2025年09月23日 09:04:01   作者:骑不快的小欧同学  
MySQL 8.0前InnoDB自增ID重启会丢失,重新插入从max+1开始;8.0后持久化到磁盘,保留原有值,MyISAM在8.0及以后版本均不会丢失自增ID,差异源于存储引擎对自增值的处理方式

之前面试的时候遇到一个问题,因为平时自己都是用的mysql 8.0+ 版本所以这里踩了一个坑记录一下

一、场景

假如在对一个有自增长ID的一个表新增 id分别为 1,2,3,4,5数据时,在进行删除id 为5的数据成功后

mysql 宕机了,重启了对这张表重新插入数据,那么这个自增长ID 会从多少开始

二、场景分析

1.针对于innodb(MYSQL 事务存储引擎)

在mysql 8.0 版本之前,mysql对于自增长ID属性auto-increment 的值都是存储在内存中的,当mysql发生重启或者宕机的情况下,内存中的值会丢失,这个属性就会被重新计算,计算方式是max(自增长id)+1

在mysql 8.0 之前 针对这个问题进行了修复,把属性auto-increment 放入到了本地磁盘中进行一个持久化的操作

2.对于MyISAM(MYSQL 非事务存储引擎)

MyISAM 的话在mysql 8.0和8.0之后都不会发生自增ID丢失的情况

总结

例如:

上述问题主要需要根据mysql版本和不同存储引擎是否对自增长ID进行一个持久化操作来进行分析不同的情况

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

相关文章

  • 深入了解MySQL锁机制及应用场景

    深入了解MySQL锁机制及应用场景

    MySQL锁是操作MySQL数据库时常用的一种机制。MySQL锁可以保证多个用户在同时执行读写操作时,能够互相协同、避免数据出现不一致或者读写冲突等问题。本篇文章将详细介绍MySQL锁的基本知识和具体应用
    2023-03-03
  • MySQL处理重复数据插入的处理方案

    MySQL处理重复数据插入的处理方案

    在数据库操作中,处理重复数据插入是一个常见的需求,特别是在批量插入数据时,可能会遇到主键冲突或唯一键冲突(Duplicate entry)的情况,本文将以一个实际的Python MySQL数据库操作为例,分析如何优化异常处理逻辑,需要的朋友可以参考下
    2025-04-04
  • Mysql并发常见的死锁及解决方法

    Mysql并发常见的死锁及解决方法

    死锁是在并发执行的过程中,两个或多个事务相互等待对方释放资源的情况,本文主要介绍了Mysql并发常见的死锁及解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • MySQL中空值处理COALESCE函数及COALESCE函数使用

    MySQL中空值处理COALESCE函数及COALESCE函数使用

    COALESCE是SQL标准函数,返回参数列表中首个非空值,支持多参数处理,适用于查询、条件判断、排序等场景,与IFNULL等函数相比更灵活,可避免空值错误,提升查询健壮性,本文给大家介绍MySQL中空值处理COALESCE函数及coalesce函数的使用,感兴趣的朋友一起看看吧
    2025-09-09
  • MySQL中的undo日志

    MySQL中的undo日志

    这篇文章主要介绍了MySQL中的undo日志的相关资料,帮助大家更好的理解和学习MySQL的相关知识,感兴趣的朋友可以了解下
    2020-11-11
  • mysql 定时任务的实现与使用方法示例

    mysql 定时任务的实现与使用方法示例

    这篇文章主要介绍了mysql 定时任务的实现与使用方法,结合实例形式分析了MySQL定时任务的相关原理、创建及使用方法,需要的朋友可以参考下
    2019-11-11
  • Mysql实现导出表结构和数据过程

    Mysql实现导出表结构和数据过程

    文章主要内容是关于如何导出和导入MySQL数据库中的表结构和数据,包括导出指定表的结构和数据,以及如何在本地和远程服务器之间传输数据,文章还提到在PHP中使用`mysql_connect`函数时的一些注意事项
    2025-12-12
  • MySQL系列之十一 日志记录

    MySQL系列之十一 日志记录

    这篇文章主要介绍了MySQL日志文件详解,本文分别讲解了错误日志、二进制日志、通用查询日志、慢查询日志、Innodb的在线redo日志、更新日志等日志类型和作用介绍,需要的朋友可以参考下
    2021-07-07
  • MySql子查询IN的执行和优化的实现

    MySql子查询IN的执行和优化的实现

    本文主要介绍了MySql子查询IN的执行和优化的实现,详细的介绍了为什么IN这么慢以及如何优化,具有一定的参考价值,感兴趣的可以了解一下
    2021-07-07
  • MySQL 事务隔离级别及实际业务应用场景

    MySQL 事务隔离级别及实际业务应用场景

    本文详细介绍了MySQL的四种事务隔离级别(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE),并探讨了每种隔离级别在实际业务中的应用场景,感兴趣的朋友跟随小编一起看看吧
    2026-01-01

最新评论