当前位置: 首页 > news >正文

MySQL 8.0 新特性之自增变量持久化

MySQL 8.0 新特性之自增变量持久化

文章目录

  • MySQL 8.0 新特性之自增变量持久化
    • MySQL 5.7 vs 8.0 测试对比
      • MySQL 5.7
      • MySQL 8.0
    • 参考资料

MySQL 8.0 中支持自增变量持久化,实际也是解决之前版本中存在的自增主键重启重置的 BUG 问题( BUG #199:Innodb autoincrement stats los on restart) 。

MySQL 8.0 开始,当前最大的自增计数器每当发生变化,值会被写入 redo log 中,并在每个检查点时保存在 engine-private system table 中,对 AUTO_INCREMENT 值进行持久化,MySQL 重启后,该值也不会改变。

MySQL 5.7 vs 8.0 测试对比

MySQL 5.7

# MySQL 5.7
mysql> select * from t2;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 |    1 |   11 |   22 |
|  2 |    2 |   22 |   33 |
|  3 |    2 |   22 |   25 |
|  4 |    2 |   11 |   22 |
+----+------+------+------+
4 rows in set (0.01 sec)# 对应自增值(AUTO_INCREMENT)为 5
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT,`c1` int(11) DEFAULT NULL,`c2` int(11) DEFAULT NULL,`c3` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)# 修改主键值
mysql> update t2 set id=5 where id=4;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from t2;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 |    1 |   11 |   22 |
|  2 |    2 |   22 |   33 |
|  3 |    2 |   22 |   25 |
|  5 |    2 |   11 |   22 |
+----+------+------+------+
4 rows in set (0.00 sec)# 自增值(AUTO_INCREMENT)未发生变化
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT,`c1` int(11) DEFAULT NULL,`c2` int(11) DEFAULT NULL,`c3` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)# 插入数据,此时报错“主键冲突”
mysql> insert into t2 (c1,c2,c3) values (3,11,12);
ERROR 1062 (23000): Duplicate entry '5' for key 'PRIMARY'# 再次查看自增值(AUTO_INCREMENT)已变为 6
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT,`c1` int(11) DEFAULT NULL,`c2` int(11) DEFAULT NULL,`c3` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)# 测试再次插入数据,此时正常
mysql> insert into t2 (c1,c2,c3) values (3,11,12);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t2;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 |    1 |   11 |   22 |
|  2 |    2 |   22 |   33 |
|  3 |    2 |   22 |   25 |
|  5 |    2 |   11 |   22 |
|  6 |    3 |   11 |   12 |
+----+------+------+------+
5 rows in set (0.00 sec)# 自增值(AUTO_INCREMENT)此时变为 7
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT,`c1` int(11) DEFAULT NULL,`c2` int(11) DEFAULT NULL,`c3` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)

MySQL 8.0

# MySQL 8.0
mysql> select * from t2;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 |    1 |   11 |   22 |
|  2 |    2 |   22 |   33 |
|  3 |    2 |   22 |   25 |
|  4 |    2 |   11 |   22 |
+----+------+------+------+
4 rows in set (0.01 sec)# 对应自增值(AUTO_INCREMENT)为 5
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int NOT NULL AUTO_INCREMENT,`c1` int DEFAULT NULL,`c2` int DEFAULT NULL,`c3` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)# 修改主键值
mysql> update t2 set id=5 where id=4;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from t2;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 |    1 |   11 |   22 |
|  2 |    2 |   22 |   33 |
|  3 |    2 |   22 |   25 |
|  5 |    2 |   11 |   22 |
+----+------+------+------+
4 rows in set (0.00 sec)# 查看自增值(AUTO_INCREMENT)已变为 6
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int NOT NULL AUTO_INCREMENT,`c1` int DEFAULT NULL,`c2` int DEFAULT NULL,`c3` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)# 再次修改主键值
mysql> update t2 set id=8 where id=5;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from t2;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 |    1 |   11 |   22 |
|  2 |    2 |   22 |   33 |
|  3 |    2 |   22 |   25 |
|  8 |    2 |   11 |   22 |
+----+------+------+------+
4 rows in set (0.00 sec)# 查看自增值(AUTO_INCREMENT)已变为 9
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int NOT NULL AUTO_INCREMENT,`c1` int DEFAULT NULL,`c2` int DEFAULT NULL,`c3` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)# 插入数据正常
mysql> insert into t2 (c1,c2,c3) values (3,11,12);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t2;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 |    1 |   11 |   22 |
|  2 |    2 |   22 |   33 |
|  3 |    2 |   22 |   25 |
|  8 |    2 |   11 |   22 |
|  9 |    3 |   11 |   12 |
+----+------+------+------+
5 rows in set (0.00 sec)# 查看自增值(AUTO_INCREMENT)正常变为 10
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int NOT NULL AUTO_INCREMENT,`c1` int DEFAULT NULL,`c2` int DEFAULT NULL,`c3` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)

参考资料

【1】AUTO_INCREMENT Handling in InnoDB

相关文章:

MySQL 8.0 新特性之自增变量持久化

MySQL 8.0 新特性之自增变量持久化 文章目录 MySQL 8.0 新特性之自增变量持久化MySQL 5.7 vs 8.0 测试对比MySQL 5.7MySQL 8.0 参考资料 MySQL 8.0 中支持自增变量持久化,实际也是解决之前版本中存在的自增主键重启重置的 BUG 问题( BUG #199&#xff1…...

网站建设公司哪家好?好的网站建设公司应该有哪些特别之处?

面对众多的网站建设公司,企业该如何选择呢?如何才能避坑呢?本文将探讨好的网站建设公司应该具备的特别之处 案例,这是最直观的表现,一个好的网站建设公司必然拥有为数众多的的案例展示,且这些案例质量高&a…...

香山南湖架构分析--FE

总体架构 分支预测和指令缓存,通过FTQ达到解耦的目的;FTQ将请求送给ICache,进行取指;取出的指令码通过预译码初步检查分支预测的错误并及时冲刷预测流水线;检查后的指令送入指令缓冲并传给译码模块,最终形成后端的指令…...

【Linux的那些事】shell命名及Linux权限的理解

目录 一、shell命令以及运行原理 二、Linux权限的概念 三、Linux权限管理 3.1.文件访问者的分类(人) 3.2.文件类型和访问权限(事物属性) 3.3.文件权限值的表示方法 3.4.文件访问权限的相关设置方法 a)chmod b)chown c)…...

Visual Studio 2022 配置 Boost 库

一、使用预编译版本 尽量不要使用预编译版本,因为可能构建的不完全,还得重新构建,不如一步到位 1. 下载预编译的 Boost 库 下载:Boost C Libraries - Browse /boost-binaries at SourceForge.net 2. 选择 msvc 版本&#xff0…...

逻辑回归(下): Sigmoid 函数的发展历史

背景 闲来无事翻了一下之前买的一个机器学习课程及之前记录的网络笔记,发现遇到公式都是截图,甚至是在纸上用笔推导的。重新整理一遍之前逻辑回归函数的学习笔记,主要是为了玩一下 LaTex 语法,写公式挺有意思的。 整理之前三篇笔…...

快速理解mQ(三)——RabbitMQ 各种交换机的区别与应用

RabbitMQ是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP),允许应用程序或系统以异步的方式交换数据。RabbitMQ中的交换机(Exchange)是消息的分发中心,它接收来自生产者的消息&#xf…...

【五分钟学会】YOLO11 自定义数据集从训练到部署

数据集地址 数据集包含 360 张红血细胞图像及其注释文件,分为训练集与验证集。训练文件夹包含 300 张带有注释的图像。测试和验证文件夹都包含 60 张带有注释的图像。我们对原始数据集进行了一些修改以准备此 CBC 数据集,并将数据集分成三部分。在360张…...

Redis学习(十二)连接数不足报错及分析修复:ERR max number of clients reached.

目录 一、问题介绍二、问题分析2.1 redis-cli 登录2.2 info clients 查看连接数情况2.3 client list 查看具体连接情况2.4 分析连接空闲时长2.5 client list 根据客户端IP统计连接数 三、问题结论和解决3.1 问题结论:3.2 解决方案①:优化程序3.3 解决方案…...

八股文面试题总结(包含主流的面试经典题)

Java基础 1、JDK和JRE的区别是什么** JDK是Java开发工具包,JRE是Java运行时环境,二者的区别在于 JRE是Java程序运行所必须的,它包含jvm和一些Java的基础类库 JDK是Java程序开发所必须的,它包含JRE和一些开发工具 总结一下就是…...

一分钟掌握 Java22 新特性

1. 增强的模式匹配(Pattern Matching for Switch) Java 22 扩展了模式匹配的功能,允许在 switch 语句中使用模式匹配,从而使代码更加简洁和易读。 示例代码: public class PatternMatchingSwitchDemo {public stati…...

西安凭借入驻企业展示科技“硬”实力的数字媒体产业园

在古城西安的怀抱中,一座以科技“硬”实力为核心竞争力的数字媒体产业园——西安国际数字影像产业园,正以其独特的魅力和无限的潜力,吸引着全球的目光。这里,不仅是数字创意的孵化场,更是科技创新的策源地。 西安国际数…...

【网络安全】利用XSS、OAuth配置错误实现token窃取及账户接管 (ATO)

未经许可,不得转载。 文章目录 正文正文 目标:target.com 在子域sub1.target.com上,我发现了一个XSS漏洞。由于针对该子域的漏洞悬赏较低,我希望通过此漏洞将攻击升级至app.target.com,因为该子域的悬赏更高。 分析认证机制后,我发现: sub1.target.com:使用基于Cook…...

浙江所有省级医院体检报告查询上线浙里办!

在医院完成体检后不知道什么时候出报告 体检报告出来后又要跑一次医院去拿报告 历年体检报告没保管好 往年体检报告找不到了 ………… ​编辑 为解决这些问题,浙江省卫生健康委结合“两卡融合、一网通办”工作的推进,不断丰富电子健康医保卡的功能&#…...

支付宝支付Java+uniapp支付宝小程序

JS: request.post(/vip/pay, {//这是自己写的java支付接口id: this.vipInfo.id,payWay: alipay-mini}).then((res) > {let success (res2) > {//前端的支付成功回调函数this.$refs.popup.close();// 支付成功刷新当前页面setTimeout(() > {this.doGetVipI…...

Linux-磁盘优化的几个思路

优化前先看看性能指标 I/O 基准测试 fio(Flexible I/O Tester)正是最常用的文件系统和磁盘 I/O 性能基准测试工具。这类工具非常用,了解即可 应用程序优化 应用程序处于整个 I/O 栈的最上端,它可以通过系统调用,来调…...

【第三版 系统集成项目管理工程师】第15章 组织保障

持续更新。。。。。。。。。。。。。。。 【第三版】第十五章 组织保障 15.1信息和文档管理15.1.1 信息和文档1.信息系统信息-P5462.信息系统文档-P546 15.1.2 信息(文档)管理规则和方法1.信息(文档)编制规范-P5472.信息(文档)定级保护-P5483.信息(文档)配置管理-P549练习 15.…...

从编程视角看生命、爱、自由、生活的排列顺序

从编程视角看生命、爱、自由、生活的排列顺序 离开大学校园,踏入大厂成为一名算法工程师后,我常以编程思维看待生活中的事物。在思考生命、爱、自由和生活的排列顺序时,发现从编程角度分析这些概念会有独特见解。 一、生命——程序的核心代…...

Lumerical——属性编辑窗口的详解

一、几何选项卡(Geometry tab) 通过几何选项卡中的选项可以设定物件的位置和大小。 二、材料选项卡(Material tab) ① 材料(MATERIAL): 在该字段可以设置成材料数据库中包含的任何材料。数据库也有可能包含一些新材料,也可以对已经包含的材料进行编辑。如果选…...

08实战篇:972应用题(2024)思路解析

在本节中,你将学习到: 2024年972应用题的基本解题思路如何应对陌生的社会/学术热点问题,避免初见杀题目一:阐述搜索引擎的工作基本原理 关键词:搜索引擎、基本原理题型:基础概念题这是一道混在应用题中的简答题。根据《信息检索》一书中的P37内容回答即可(同时对应P45—…...

Scandit Barcode Scanner:这家瑞士公司的SDK,如何让淘宝、京东的扫码快人一步?

Scandit Barcode Scanner:解码瑞士技术如何重塑全球扫码体验 在移动互联网时代,扫码已成为连接物理世界与数字世界的无形桥梁。从超市收银台到物流仓库,从零售门店到电商平台,条码扫描技术默默支撑着现代商业的高效运转。而在这背…...

【限时开放】Perplexity医疗知识图谱API密钥申请通道关闭倒计时——全球仅剩47个三甲机构白名单资格

更多请点击: https://intelliparadigm.com 第一章:Perplexity医疗信息搜索 Perplexity 是一款以实时网络检索与引用溯源为核心能力的AI搜索工具,在医疗健康领域展现出独特价值。它不同于传统搜索引擎,能直接解析PubMed、NEJM、CD…...

TTK插件系统扩展指南:自定义Golden生成函数和输入数据生成函数的完整教程

TTK插件系统扩展指南:自定义Golden生成函数和输入数据生成函数的完整教程 【免费下载链接】ops-test-kit TTK(Ops Test Tool Kit)是CANN算子库提供的全链路、自动化、批量化算子测试框架,帮助开发者快速完成算子批量功能验证、性能…...

5分钟学会在PowerPoint中插入LaTeX公式:科研工作者的高效神器

5分钟学会在PowerPoint中插入LaTeX公式:科研工作者的高效神器 【免费下载链接】latex-ppt Use LaTeX in PowerPoint 项目地址: https://gitcode.com/gh_mirrors/la/latex-ppt 还在为PowerPoint里输入复杂的数学公式而头疼吗?作为科研人员、教师或…...

Nodejs后端服务集成Taotoken实现AI对话功能的具体配置指南

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Nodejs后端服务集成Taotoken实现AI对话功能的具体配置指南 1. 准备工作:获取API密钥与模型ID 在开始编写代码之前&…...

如何快速实现Android Studio中文界面:终极完整汉化指南

如何快速实现Android Studio中文界面:终极完整汉化指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为Android…...

Figma界面3分钟变中文:设计师必备的完整汉化终极指南

Figma界面3分钟变中文:设计师必备的完整汉化终极指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?作为一名中文设计师&#x…...

用Tableau分析酒店数据:手把手教你做地区均价条形图和价格等级饼图

用Tableau分析酒店数据:手把手教你做地区均价条形图和价格等级饼图 酒店行业的数据分析往往需要快速洞察不同地区的价格分布和消费层级特征。作为全球领先的商业智能工具,Tableau能以直观的可视化方式呈现这些关键指标。本文将带你从零开始,用…...

从Verilog到GDS:用Calibre nmLVS-H模式搞定复杂芯片的层级化物理验证

从Verilog到GDS:用Calibre nmLVS-H模式搞定复杂芯片的层级化物理验证 在当今超大规模集成电路设计中,物理验证已成为确保芯片功能正确的最后一道防线。随着工艺节点不断微缩,设计复杂度呈指数级增长,传统的扁平化验证方法已难以应…...

大语言模型推理引擎优化:架构挑战与关键技术解析

1. 大语言模型推理引擎的架构挑战与优化方向1.1 Transformer架构的固有瓶颈Transformer架构的自注意力机制存在两大核心瓶颈:计算复杂度和内存占用。对于序列长度N,自注意力层的计算复杂度为O(N),这使得长文本处理成为性能黑洞。以2048 token…...