mysql innodb 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)   看结果

2019101895912639.jpg?201991895922

结论

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

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

总结

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

本文标题: MySQL InnoDB row_id边界溢出验证的方法步骤

本文地址: http://www.cppcns.com/shujuku/mysql/281273.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql memcached java_java缓存技术memcached实例

1 下载memcached-1.2.1-win32.zip 并且解压.2 新建web project项目 名字自己取,然后导入必要的包,alisoft-xplatform-asf-cache-2.5.1.jar,commons-logging-1.0.3.jar,log4j-1.2.13.jar3 新建类 user.javapackage bean;import java.io.Serializable;public class User impleme…

编译安装mysql5.6.36_MySQL5.6.36编译安装

一、MySQL5.6.36安装前准备(1)克隆一个模板机器(使用centos6),克隆完做快照(2)IP 10.0.0.52 主机名db02(3)iptables selinux(4)下载好5.6.36(5)安装依赖包yum install -y ncurses-devel libaio-devel cmake(6)安装cmakeyum install cmake –y(7)创建用户useradd -s …

mysql mysqld.sock_MySQL笔记-最简单的方法来解决找不到mysqld.sock文件的问题

首先,环境:ubuntu 14.04,采用apt-get的方式安装的,手动安装可能路径设置稍有区别。1、安装MySQL后,用命令行首次启动时发现找不到Mysqld.sock文件,提示:ERROR 2002 (HY000): Cant connect to local MySQL server throu…

plan explorer mysql_plan explorer支持oracle吗

展开全部1.SQL语句的执行62616964757a686964616fe58685e5aeb931333361326365计划使用EXPLAIN PLAN语句来确定Oracle数据库下指定SQL语句的执行计划,这个语句插入每一步执行计划的行描述到指定表中。你也可使用EXPLAIN PLAN语句作为SQL跟踪工具的一部分。EXPLAIN PLA…

python 列表转图结构_Python读取网络(图)边列表数据进而转化为邻接矩阵

import networkx as nxG nx.Graph()path ./edge_list.txtedge_list []node_set set() #集合的特性就是元素不会重复,互异的with open(path, r) as f:for line in f:cols line.strip().split( )y1int(cols[0])y2int(cols[1])node_set.add(y1)node_set.add(y2)ed…

r语言读写word_R语言:在word中插入ggplot

最近CRAN上新了一个叫eoffice的package,并且不时被各路大佬提起。这个包的功能刚好也符合我最近的需求,这次带各位先来试试水。包的官方介绍:1. Introduction​cran.r-project.org这次主要试试在word中用该包插入ggplot。既然要试&#xff0c…

hamburger组件_一个侧边栏导航组件实现思路

翻译:布兰作者:Adam Argyle来源:https://web.dev/building-a-sidenav-component/在这篇文章中,我想和大家分享我是如何为 web 原型化一个 Sidenav 组件的,这个组件是响应式的,有状态的,支持键盘…

centos php mysql 5.6 安装_centos7安装nginx、php5.5、mysql5.6

一、nginx1、安装yum install nginx2、启动systemctl start nginx关闭:systemctl stop nginx 重启:systemctl restart nginx 检查状态:systemctl status nginx3、测试浏览器直接访问http://ip,应该会看到以下界面:4、支持php打开/…

myeclipse怎么导入mysql驱动_myeclipse sql导入数据库驱动包

如何配置strutshibernate,基本使用方法不少童鞋在自学SSH框架的时候,难在创建第一个项目,如何搭建好这些框架,很多书上只是给出了代码但是没有教如何使用,所以在本次博客中将会图文结合来说一下如何使用struts结合hibe…

mysql 报表统计sql使用实例_mysql 案例~mysql元数据的sql统计

一 简介:今天我们来收集下提取元数据的sql二 前沿: information_schema 引擎 memory 元数据收集表三 sql语句:1#没有使用索引的表统计SELECT t.TABLE_SCHEMA,t.TABLE_NAME,t.TABLE_ROWS FROM information_schema.tables AS t LEFT JOIN (SELECT DISTINCT table_schema, table_…

创建或更改表 tablename 失败_mysql 创建用户

一. 创建用户命令:CREATE USER usernamehost IDENTIFIED BY password;说明:username:你将创建的用户名host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆&#…

linux忘记mysql登录用户密码_linux中忘记mysql用户root密码解决方案

1.vim /etc/my.cnf[mysqld]skip-grant-tables ##追加此行,跳过权限表,2.重启mysqlsystemctl restart mysqld3.mysql 登陆mysqlmysql> use mysql;mysql> UPDATE user SET Password password ( ‘zha123456‘ ) WHERE User ‘root‘ ;mysql> fl…

sql2000 mysql 兼容_SQL Server2000如何恢复数据库

以里诺仓库管理软件(SQL网络版)为例,如果您因电脑操作系统重装,需要把以前备份的数据库恢复过来,请您按如下操作来。首先,您需要安装MS SQL Server2000。1. 以Windowns XP为例,SQL Server个人版安装完成后,…

suse下删除mysql_每日MySQL之005:SUSE linux下卸載MySQL

卸載這里的卸載,對應於之前的安裝停止MySQL服務:db2a:~ #service mysql stop找到所有的MySQL包:db2a:~ #rpm -qa | grep -i mysqlmysql-community-server-5.7.19-1.sles11mysql-community-common-5.7.19-1.sles11libqt4-sql-mysql-4.6.3-5.34…

java中br.readline_Java:java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket.从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法&…

java dfs_Java数据结构与算法 深搜(DFS)的简单使用(一)之排列组合

今天,我们来简单介绍一下深度优先搜索(DFS)的概念和使用。在百度词条中,对深搜的解释是这样的。百度词条中的解释由此,我们可知,深搜是广泛运用到 图 中的搜索方法之一。用深度优先搜索遍历图的基本思路是:(1)访问顶点…

java数组元素是类_Java数组及其常用类

本文由疯狂软件教育中心整理,更多Java等高新技术,疯狂软件期待与你交流。一、JAVA中的数组(1)数组的定义:是有相同类型的、用一个标识符名称封装到一起的一个对象序列或基本数据类型数据序列。数组是一种最简单的复合数据类型。数组可以是一维…

java 数组 equals_java中用equals比较两个内容相同的字符数组

********************************************你在数组上调用函数equals,比较的是c和ch的地址改成if(Arrays.equals(ch,c));就可以比较c和ch的内容了********************************************java.sun.com上说,The equals method for class Object implements…

java ssh pdf_JavaSSH框架技术规范.pdf

航安项目(三期)框架技术规范日期 版本 简述 作者2011年3月1 日 V1.0 指定本系统的技术规范2011年9月25 日 V2.0 指定本系统的技术规范框架技术规范航安项目框架技术规范 目录1、规范配置说明12、系统三层架构规范配置说明12.1 Dao22.2 Entity42.3 Service43、Spring 规范配置说…

java 线程执行结束_Java_如何等待子线程执行结束

本程序的数据有可能是如下:main thread work startsub thread start working.main thread work done.now waiting sub thread done.sub thread stop working.now all done.忽略标号, 当然输出也有可能是1和2调换位置了. 这个我们是无法控制的. 我们看下线程的join操作, 究竟干了…