千家信息网

MySQL中InnoDB row_id边界溢出验证的示例分析

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,小编给大家分享一下MySQL中InnoDB row_id边界溢出验证的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧
千家信息网最后更新 2025年11月13日MySQL中InnoDB row_id边界溢出验证的示例分析

小编给大家分享一下MySQL中InnoDB row_id边界溢出验证的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

背景

跟同学聊到row_id一个边界问题,这里详细说明下。

InnoDB表若没有定义主键,会使用系统的一个默认递增row_id (dict_sys->row_id)作为主键。每次插入一行加1,到达最大值循环复用。

需要注意的是,虽然dict_sys->row_id 被定义为一个unsigned long long, 但由于这个主键值只有6个字节,因此最大值是2^48。 row_id超过这个值还是会递增,只是写入的时候只取低位,可以认为是做取模操作。

问题

这就涉及到一个问题,一个长期运行的MySQL里,如果频繁插入删除行(像日志类的表),即使最终表规模不是很大,仍可能会出现值row_id重用。而我们知道作为主键值,是不能重复的。

假设出现这种情况,在一个表里,新插入的一行的row_id与某一个年代久远的行的row_id出现冲突,会肿么样?

验证

其实本来这里只需要一个结论。本文的目的还是跟大家探讨一种验证的方法。有了上面的信息,我们可以考虑设计如下的复现步骤:

1) 创建一张无主键空表

2) gdb设置dict_sys->row_id为1

3) 往空表插入若干行

4) gdb设置dict_sys->row_id为2^48

5) 再插入若干行

6) 看结果

结论

可以看到,行(1),(2)被覆盖了。

比较合理点的方案应该是像MySQL的表内自增主键一样,报个duplicate-key error.

以上是"MySQL中InnoDB row_id边界溢出验证的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

验证 边界 篇文章 问题 示例 分析 最大 一行 内容 最大值 结论 还是 很大 频繁 不怎么 低位 信息 只是 只有 同学 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 2020中国产业网络安全全景图 软件开发工具分为哪些 计算机网络技术待遇怎么样 软件开发质量目标确定 小型服务器可以用来做什么 联想服务器ts150 网络安全渗透员 如何检查数据库创建作业 wifi传感网络技术 外包软件开发一般多少钱 登陆南京图书馆数据库 蓝盾网络安全培训学院 sql数据库的创建 三级计算机网络技术考过指南 沧州im即时通讯软件开发 无上神帝网络安全 软件开发一般指什么 微信网络安全自查报告 互联网科技企业的经济地位 计算机中级数据库工程师 王者荣耀网络安全事件 数据库技术采用分级方法将 数据库的技术文档包括 中国气象局网络安全演练 软件开发去哪个学校好 全球时间服务器时间同步 江津区咨询软件开发流程常见问题 陈艳丽江西云购网络技术有限公司 农业农村局网络安全工作方案 自考软件开发工具历年真题
0