ToB企服应用市场:ToB评测及商务社交产业平台

标题: 面试官:MySQL 自增主键一定是连续的吗?大部分人都会答错! [打印本页]

作者: 小秦哥    时间: 2023-5-29 19:11
标题: 面试官:MySQL 自增主键一定是连续的吗?大部分人都会答错!
测试环境:

MySQL版本:8.0
数据库表:T (主键id,唯一索引c,普通字段d)

如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不能保证连续递增。
推荐一个开源免费的 Spring Boot 实战项目:
https://github.com/javastacks/spring-boot-best-practice
一、自增值的属性特征:

1. 自增主键值是存储在哪的?

MySQL5.7版本
在 MySQL 5.7 及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值 max(id),然后将 max(id)+1 作为这个表当前的自增值。
MySQL8.0之后版本
在 MySQL 8.0 版本,将自增值的变更记录在了 redo log 中,重启的时候依靠 redo log 恢复重启之前的值。
可以通过看表详情查看当前自增值,以及查看表参数详情AUTO_INCREMENT值(AUTO_INCREMENT就是当前数据表的自增值)

2. 自增主键值的修改机制?

在表t中,我定义了主键id为自增值,在插入一行数据的时候,自增值的行为如下:
根据要插入的值和当前自增值的大小关系,自增值的变更结果也会有所不同。假设,某次要插入的值是 X,当前的自增值是 Y。
<ol>如果 X




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4