问题:一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15、16、17条记录,再把MySQL重启,再insert一条记录,这条记录的ID是18还是15?
一般情况下,我们创建的表的类型是InnoDB,如果新增一条记录(不重启MySQL的情况下),这条记录的ID是18;
但是如果重启MySQL的话,这条记录的ID是15.因为InnoDB表只把自增主键的最大ID记录到内存中,所以重启数据库或者对表OPTIMIZE操作,都会使最大ID丢失。但是,如果我们使用表的类型是MyISAM,那么这条记录的ID就是18。因为MyISAM表会把自增主键的最大ID记录到数据文件里面,重启MySQL后,自增主键的最大ID也不会丢失。
最后,还可以跟面试官装个X,生产数据,不建议进行物理删除记录。
结论 最大ID记录重启之后的丢失情况主要看使用了哪个存储引擎
InnoDB 最大ID存储在内存,重启会重新计算
MyISAM 最大ID存储在数据文件(文件系统)中,重启不会丢失