MySQL 8.0特性-自增变量的持久化

MySQL 8.0特性-自增变量的持久化

在MySQL 8.0之前,自增主键AUTO_INCREMENT的值如果大于max(primary key)+1,在MySQL重启后,会重置AUTO_INCREMENT=max(primary key)+1,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。 下面通过案例来对比不同的版本中自增变量是否持久化。

MySQL5.7测试

在MySQL 5.7版本中,测试步骤如下: 创建的数据表中包含自增主键的id字段,语句如下:

sql 复制代码
CREATE TABLE test1(
id INT PRIMARY KEY AUTO_INCREMENT
);
-- 插入4个空值,执行如下:
INSERT INTO test1
VALUES(0),(0),(0),(0);

-- 查询数据表test1中的数据,结果如下:
mysql> SELECT * FROM test1;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
+----+
4 rows in set (0.00 sec)

-- 删除id为4的记录,语句如下:
DELETE FROM test1 WHERE id = 4;

-- 再次插入一个空值,语句如下:
INSERT INTO test1 VALUES(0);

-- 查询此时数据表test1中的数据,结果如下:
mysql> SELECT * FROM test1;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 5 |
+----+
4 rows in set (0.00 sec)
-- 从结果可以看出,虽然删除了id为4的记录,但是再次插入空值时,并没有重用被删除的4,而是分配了5。
-- 删除id为5的记录
DELETE FROM test1 where id=5;

重启数据库

shell 复制代码
service mysql stop
service mysql start

继续插入空值,然后再次查询数据表test1中的数据,结果如下:

sql 复制代码
mysql> INSERT INTO test1 values(0);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test1;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

从结果可以看出,新插入的0值分配的是4,按照重启前的操作逻辑,此处应该分配6。出现上述结果的主要原因是自增主键没有持久化。 在MySQL 5.7系统中,对于自增主键的分配规则,是由InnoDB数据字典内部一个 计数器 来决定的,而该计数器只在 内存中维护 ,并不会持久化到磁盘中。当数据库重启时,该计数器会被初始化。

MySQL 8.0测试

上述测试步骤最后一步的结果如下:

sql 复制代码
mysql> select * from test1;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  6 |
+----+
4 rows in set (0.00 sec)

从结果可以看出,自增变量已经持久化了。

MySQL 8.0将自增主键的计数器持久化到 重做日志中。每次计数器发生改变,都会将其写入重做日志中。如果数据库重启,InnoDB会根据重做日志中的信息来初始化计数器的内存值。

相关推荐
为思念酝酿的痛10 分钟前
MySQL表的约束
数据库·mysql
时间售卖铺16 分钟前
MySQL存储过程流程控制全解析
运维·数据库·mysql·云原生
拾起零碎23 分钟前
U8/触发器,把自定义项写入批次档案
数据库
IT19959 小时前
Fail2Ban 防护 MySQL 实战|登录失败 3 次,IP 封禁 24 小时
数据库·mysql
夕除9 小时前
redis--IO 多路复用(select + poll)
数据库·sql
paopaokaka_luck12 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
lzhdim13 小时前
100条常用SQL语句
数据库·sql·mysql·mybatis
天河归来13 小时前
从原始消息到业务数据:三层数据架构的设计与实践
数据库·数据仓库·架构
数据库小学妹13 小时前
金融数据库成本怎么算?五笔钱加一张TCO表
数据库·金融行业·数据库选型·国产化替代·tco·金融数据库
KaiwuDB13 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式