【MySQL必会】删除MySQL表中的最后几条记录并重启服务,该表中的自增主键会连续吗?

问题:

一张表里面有 ID 自增主键,当 insert 了 17 条记录之后, 删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ?引擎中的自增主键会连续吗?讲下原因?(不同的引擎对于自增值的保存策略不同,需要对MySQL的InnoDB、myIsAm两个引擎分别分析)

回答:
  • 如果表的类型是InnoDB,那么是15。
    因为在MySQL5.7以及之前的版本,InnoDB只是把自增主键的最大ID记录到内存中,并没有持久化到文件里,所以重启数据库会对表进行OPTIMZE优化操作,导致最大ID丢失。重启数据库之后,再次新增记录时,会使用【当前表中最大id值 + 1】作为新插入的id。
    • 而在 MySQL 8.0版本之后,已经具备了自增值持久化的能力。
  • 如果表的类型是MyISAM,那么是18。
    因为MyISAM表会把自增主键的最大ID记录到数据文件里,具备自增值持久化的能力,即使重启MySQL自增主键的最大ID也不会丢失。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值