MySQL InnoDB row_id边界溢出验证的方法步骤

 更新时间:2019年10月18日 10:00:57   作者:丁林.tb  
这篇文章主要给大家介绍了关于MySQL InnoDB row_id边界溢出验证的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用MySQL InnoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

背景

跟同学聊到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.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • ERROR 1222 (21000): The used SELECT statements have a different number of columns

    ERROR 1222 (21000): The used SELECT statements have a differ

    mysql 提示SQL-ERROR summary different number of columns
    2011-07-07
  • MySQL索引的一些常见面试题大全(2022年)

    MySQL索引的一些常见面试题大全(2022年)

    索引(Index)是帮助MySQL高效获取数据的数据结构,是对表中一列或多列值进行排序的结构,下面这篇文章主要给大家介绍了关于MySQL索引的一些常见面试题,文中介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • MySql状态查看方法 MySql如何查看连接数和状态?

    MySql状态查看方法 MySql如何查看连接数和状态?

    如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接
    2012-11-11
  • 在MySQLDump中使用-w语句进行备份的方法

    在MySQLDump中使用-w语句进行备份的方法

    这篇文章主要介绍了在MySQLDump中使用-w语句进行备份的方法,MySQLDump是一款很有人气的MySQL数据转存工具,需要的朋友可以参考下
    2015-05-05
  • mysql order by 排序原理解析

    mysql order by 排序原理解析

    当涉及到大量数据时,对于 ORDER BY 操作,可以考虑为相应的列添加索引,如果不使用索引,mysql会使用filesort来进行排序,这篇文章主要介绍了mysql order by 排序原理,需要的朋友可以参考下
    2024-02-02
  • MySQL replace函数替换字符串语句的用法

    MySQL replace函数替换字符串语句的用法

    MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪。
    2010-12-12
  • MySQL大库搭建主从的一种思路分享

    MySQL大库搭建主从的一种思路分享

    这篇文章主要介绍了MySQL大库搭建主从的一种思路分享,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-03-03
  • MySQL Count函数使用教程

    MySQL Count函数使用教程

    这篇文章主要介绍了MySQL Count函数,COUNT()是一个聚合函数,返回指定匹配条件的行数。开发中常用来统计表中数据,全部数据,不为NULL数据,或者去重数据
    2022-12-12
  • MySQL中使用流式查询避免数据OOM

    MySQL中使用流式查询避免数据OOM

    这篇文章主要介绍了MySQL中使用流式查询避免数据OOM,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • MySQL数据库innodb启动失败无法重启的解决方法

    MySQL数据库innodb启动失败无法重启的解决方法

    这篇文章给大家分享了MySQL数据库innodb启动失败无法重启的解决方法,通过总结自己遇到的问题分享给大家,让遇到同样问题的朋友们可以尽快解决,下面来一起看看吧。
    2016-09-09

最新评论