
关于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。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月09日 18时57分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何转载博客
2019-03-12
C++ 继承 详解
2019-03-12
OSPF多区域
2019-03-12
Grafana导入 Promethus node模板
2019-03-12
如何提高SQL查询的效率?
2019-03-12
Docker入门之-镜像(二)
2019-03-12
数据结构——链表(3)
2019-03-12
socket模块和粘包现象
2019-03-12
Python学习--模块
2019-03-12
去了解拉绳位移编码器的影响因素
2019-03-12
影响拉线位移传感器精度的原因有哪些?
2019-03-12
无法初始化Winsock2.2处理
2019-03-12
Horizon Cloud之UAG访问异常
2019-03-12
vm无法打开电源
2019-03-12
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2019-03-12
重置UAG Application admin密码
2019-03-12
Horizon Daas租户管理平台扩展分配时报:内部错误
2019-03-12
vcenter访问报503错误处理
2019-03-12
项目计划甘特图绘制说明
2019-03-12
09.QT应用程序启动外部exe文件
2019-03-12