关于MySQL中自增列的理解
发布日期:2021-05-15 01:31:35 浏览次数:15 分类:精选文章

本文共 817 字,大约阅读时间需要 2 分钟。

MyIAM存储引擎下的ID变化

在使用MyIAM存储引擎时,自增列的信息会被持久化存储到.frm文件中。这意味着在数据库重启后,引擎可以继续从上一个有效的ID值开始递增。以下是具体的分析:

  • 初始状态:插入了17条记录,此时自增列的最大ID为17。
  • 删除记录:删除了第15、16、17条记录,这些记录已被标记为已删除,但自增列的最大ID会变为14。
  • 数据库重启:由于信息存储在.frm文件中,重启后引擎会恢复最大ID为14。
  • 插入新记录:新的记录ID会从14递增到18。

因此,在MyIAM存储引擎下,数据库重启后新插入的记录ID为18。


InnoDB存储引擎下的ID变化

InnoDB存储引擎中,自增列的信息并不持久化存储。因此,在数据库重启后,引擎会根据恢复后的最大ID值加1来生成新的ID:

  • 初始状态:插入了17条记录,此时自增列的最大ID为17。
  • 删除记录:删除了第15、16、17条记录,自增列的最大ID会变为14。
  • 数据库重启:重启后,引擎会从.ibd文件中恢复所有记录,发现自增列的最大ID为14。
  • 插入新记录:新的记录ID会从14递增到15。

因此,在InnoDB存储引擎下,数据库重启后新插入的记录ID为15。


MySQL 8.0后InnoDB存储引擎的改进

在MySQL 8.0版本中,InnoDB存储引擎对自增列的处理有所改进。自增列的信息现在会被存储在共享表空间中,这意味着在数据库重启后,引擎可以准确地恢复自增列的状态,从而避免了从最大ID加1的逻辑中恢复的不准确性。

  • 示例
    • 数据库停止前,自增列的最大ID为17。
    • 删除了第15、16、17条记录后,自增列的最大ID会变成14。
    • 数据库重新启动后,引擎会从持久化存储中读取最大ID为14,并继续递增到15。
    • 插入一条记录后,该记录的ID会是15。

由此可见,MySQL 8.0及其之后,无论使用MyIAM还是InnoDB存储引擎,新插入的记录ID都为18。

上一篇:java常用类---LinkedList 源码分析及用法
下一篇:如何利用sql查找表中的重复数据?

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月09日 18时57分33秒