结论
- 如果表的类型是 InnoDB,那么是 2;InnoDB 表只是把自增主键的最大 ID 记录到内存中,所以重启数据库或者是对表进行 OPTIMIZE 操作,都会导致最大 ID 丢失 。
- 如果表的类型是 MyISAM,那么是 5;因为 MyISAM 表会把自增主键的最大 ID 记录到数据文件里,重启 MySQL 自增主键的最大ID 也不会丢失 。
下面真实模拟下这个问题
使用Innodb
新建表,主键设置自增

文章插图

文章插图
设置表引擎为InnoDB

文章插图

文章插图
?
新增数据:

文章插图

文章插图
?
删除234

文章插图

文章插图
?
关闭服务、然后重启服务

文章插图

文章插图
?
重启服务之后,添加数据

文章插图

文章插图
?
结论:【把 Mysql 重启,主键自增id还会保持重启之前的值吗?】
如果表的类型是 InnoDB,那么是 2;InnoDB 表只是把自增主键的最大 ID 记录到内存中,所以重启数据库或者是对表进行 OPTIMIZE 操作,都会导致最大 ID 丢失 。
同上面的步骤,使用myIsam
新建表,引擎改为myisam

文章插图

文章插图
?
添加四条数据,id=1,2,3,4,删除id=2,3,4的数据

文章插图

文章插图
?
重启服务:id是5,不是2

文章插图

文章插图
?
结论:
如果表的类型是 MyISAM,那么是 5;因为 MyISAM 表会把自增主键的最大 ID 记录到数据文件里,重启 MySQL 自增主键的最大ID 也不会丢失 。
推荐阅读
- 手把手教你快速搭建一个可视化拖拽平台
- Linux服务器开发之MySQL 集群方案
- 搭建MySQL主从实现Django读写分离
- MySQL单表最大记录数超过多少时性能会严重下降?
- Mysql手写脚本实现插入百万级随机测试数据
- Mac big sur 安装并使用MySql8
- 手把手教你搭建一个简易的文本分类器
- MySQL模糊查询再也不用like+%了
- Prometheus + Granafa 构建MySQL监控平台
- MySQL死锁分析:记一次因索引合并导致的MySQL死锁分析过程