把 Mysql 重启,主键自增id还会保持重启之前的值吗?

结论 

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

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 
 
 
设置表引擎为InnoDB 
把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 
?
 
新增数据: 
把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 
?
 
删除234 
把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 
?
 
关闭服务、然后重启服务 
把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 
?
 
重启服务之后,添加数据 
把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

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

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 
?
 
添加四条数据,id=1,2,3,4,删除id=2,3,4的数据 
把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 
?
 
重启服务:id是5,不是2 
把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 

把 Mysql 重启,主键自增id还会保持重启之前的值吗?

文章插图
 
?
 
结论: 
如果表的类型是 MyISAM,那么是 5;因为 MyISAM 表会把自增主键的最大 ID 记录到数据文件里,重启 MySQL 自增主键的最大ID 也不会丢失 。




    推荐阅读