数据库自增ID用完了会怎么样?

news2024/11/26 9:30:33

有主键

如果设置了主键,并且一般会把主键设置成自增。

Mysql里int类型是4个字节,如果有符号位的话就是[-231,231-1],无符号位的话最大值就是2^32-1,也就是4294967295。

创建一张表:

CREATE TABLE `test1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2147483647 DEFAULT CHARSET=utf8mb4;

执行插入

insert into test1(name) values('qq');

这样表里就有一条达到有符号位的最大值上限的数据。
在这里插入图片描述
如果再次执行插入语句:

insert into test1(name) values('ww');

就会看到错误提示:
1062 - Duplicate entry '2147483647' for key 'PRIMARY', Time: 0.000000s

也就是说,如果设置了主键并且自增的话,达到自增主键上限就会报错重复的主键key。

解决方案:mysql主键改为bigint,也就是8个字节。

设计的时候要考虑清楚值的上限是多少,如果业务频繁插入的话,21亿的数字其实还是有可能达到的。

没有主键

没有设置主键的话,InnoDB则会自动帮你创建一个6个字节的row_id,由于row_id是无符号的,所以最大长度是2^48-1。

同样创建一张表:

CREATE TABLE `test2` (
 `name` varchar(32) NOT NULL DEFAULT ''
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;

通过ps -ef|grep mysql拿到mysql的进程ID,然后执行命令,通过gdb先把row_id修改为1

sudo gdb -p 2584 -ex 'p dict_sys->row_id=1' -batch

然后插入几条数据:

insert into test2(name) values('1');
insert into test2(name) values('2');
insert into test2(name) values('3');

修改row_id为2^48,也就是281474976710656

sudo gdb -p 2584 -ex 'p dict_sys->row_id=281474976710656' -batch

再次插入数据

insert into test2(name) values('4');
insert into test2(name) values('5');
insert into test2(name) values('6');

然后查询数据会发现4条数据,分别是4,5,6,3。

因为我们先设置row_id=1开始,所以1,2,3的row_id也是1,2,3。

修改row_id为上限值之后,row_id会从0重新开始计算,所以4,5,6的row_id就是0,1,2。

由于1,2数据已经存在,数据则是会被覆盖。

结论

自增ID达到上限用完了之后,分为两种情况:

  • 如果设置了主键,那么将会报错主键冲突。
  • 如果没有设置主键,数据库则会帮我们自动生成一个全局的row_id,新数据会覆盖老数据

解决方案:
表尽可能都要设置主键,主键尽量使用bigint类型,21亿的上限还是有可能达到的,比如魔兽,虽然说row_id上限高达281万亿,但是覆盖数据显然是不可接受的。

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

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

相关文章

人脸识别技术趋势与发展

人脸辨识 —— 引人入胜 很少有生物辨识技术能像脸部辨识那样激发我们的想象力。 同样,它的到来在 2020 年引发了深刻的担忧和令人惊讶的反应。 脸部辨识的工作原理 脸部辨识是使用脸部辨识或验证人的身份的过程。它根据人的脸部细节捕获、分析和比较模式。 人…

Restful风格的编程

Restful风格的编程1、 Restful简介2、查询用户以及用户详情2.1常用注解2.2查询用户详情3、处理创建请求3.1RequestBody注解3.1.1用途3.1.2语法规范3.2日期类型的处理3.3BindingResult4、用户信息修改与删除4.1用户信息修改4.2案例前端界面后端控制器1、 Restful简介 Restful比…

剑指offer(C++)-JZ69:跳台阶(算法-动态规划)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法&…

【JavaSE】类与对象(上)类是什么?对象是什么?

文章目录面向过程与面向对象认识类和对象创建类类的实例化内存分布注意事项总结面向过程与面向对象 我们说C语言是面向过程的编程语言,而Java是面向对象的编程语言,那究竟什么才是面向过程与面向对象呢?我们举一个例子来帮助大家理解&#x…

PX4飞行测试

文章目录前言一、首次飞行指南飞行入门解锁飞机起飞降落飞行控制/命令辅助飞行任务飞行规划任务设置机体航向设置航点/转弯半径地理围栏故障保护地理围栏地理围栏规划安全点(集结点)创建/定义安全点地形跟随/保持地形跟随地形保持前言 本节包含有关飞行(完全配置过…

虚拟主播也带货?直播电商的变与不变

5月6日晚,海外虚拟主播vox在B站开启了中国直播首秀。从最终数据来看,直播1.7小时,营收111万人民币,当晚还登上平台热门首位,这样的直播吸金能力,让不少明星都望尘莫及。 更值得关注的是,直播间…

Matlab:表达式

Matlab:表达式变量数字矩阵运算符数组运算符函数表达式示例变量 与大多数其他编程语言一样,MATLAB 语言提供数学表达式,但与大多数编程语言不同的是,这些表达式涉及整个矩阵。 MATLAB 不需要任何类型声明或维度说明。当 MATLAB …

PyCharm 这40个使用技巧真棒

大家好,今天分享 PyCharm 40个使用技巧,内容有点长,喜欢欢迎收藏、分享、点赞。 废话不多说。我们开始吧! 文章目录技术提升第一章:运行调试篇1\. 通过指定参数,执行程序2\. 程序结束了,照样可…

Vue 3 属性绑定细节

在ButtonDemo中默认会把传给这个组件上的所有事件,都传递给Button中的最外层的元素 不管这个最外层的元素是什么!比如下图:在button外面还有一个div,那么传递给最外层的就应该是div,而不是button 最外层为div 想让组件的某一个部分,点击时被触发click事件 现在传递给最…

LeetCode-764. 最大加号标志【动态规划,二维数组】

LeetCode-764. 最大加号标志【动态规划,二维数组】题目描述:解题思路一:动态规划。用一个n*n的数组记录每个点上下左右方向上为1的最小值。最后ans返回数组中最大的加号。解题思路二:优化1。解题思路三:0题目描述&…

word制作多个单位联合发文的文件头

一、前言 word制作多个单位联合发文的文件头,好像不难。但是做起来,却发现,自己的只是储备还是不够,居然花费了1个多小时才搞定....哎 二、遇到问题 开始思路是想使用【分栏】来操作,但是不得其法,搞了一…

驱动开发基础知识

文章目录记录驱动开发前的知识储备工作一、驱动开发环境搭建二、驱动开发框架(重点:WDF框架)1、前世今生(1)Vista简介(2)发展历史2、基于框架的驱动程序的 WDM(1)驱动程序…

linux(1.nginx基础 2.使用Nginx负载均衡及动静分离)

一.nginx基础 目录 1. Nginx使用场景2. Nginx中的进程 2.1 Nginx中的多进程模型2.2 多进程模式的优点:2.3 缓存3. Ngnix的负载均衡策略 3.1 轮询法3.2 加权轮询3.3 原地址哈希3.4 最小连接数法3.5 Fair3.6 url_hash3. Nginx配置文件4. Nginxtomcat 集群示例 4.1 下…

c++学习-STL常用函数

第八部分-STL常用函数 5.1 常用遍历算法 5.1.1 for_each 5.1.2 transform 5.2 常用查找算法 5.2.1 find 5.2.2 find_if 5.2.3 adjacent_find 面试题中如果出现查找相邻重复元素,记得用stl中的adjacent_find算法 5.2.4 binary_search 5.2.5 count 5.2.6 count_if 5.…

【双十一特辑】爱心代码(程序员的浪漫)-李峋

前言 最近《点燃我温暖你》中李峋的爱心代码超级火,看着特别心动,这不,光棍节快到了,给兄弟们教学一波爱心代码,赶在双十一前表白,让这个双十一不在是孤单一个人!目录 前言 C语言简易爱心代码…

final 关键字 —— 限制继承、限制虚函数重写

final 关键字有两个作用,一个是限制继承,一个是限制重写。 目录 1、限制继承 (1) 基类的构造函数设为私有 (2) 基类类名后面加上 final 关键字修饰 2、限制虚函数重写 1、限制继承 限制继承有两种方式,一种是将基类的构造函数设为私有&am…

谷粒商城-基础篇(详细流程梳理+代码)

文章目录前言一、项目环境搭建1.1、安装virtualbox以及vagrant1.2、Docker安装MySQL与Redis1.3、前后端开发工具统一配置1.4、Git工具安装与配置1.5、Gitee创建仓库与IDEA导入1.6、构建微服务模块1.7、编写.gitignore文件(忽略上传gitee文件配置)1.8、数…

【云原生之K8s】 K8s资源控制及探针检查

文章目录一、资源限制1.资源限制的使用2.request资源(请求)和limit资源(约束)3.Pod和容器的资源请求和限制4.官方文档示例5.资源限制实操5.1 编写yaml资源配置清单5.2 释放内存(node节点,以node1为例&#…

昨晚,我用python帮学妹P证件照自拍,然后发现。。。

人生苦短,我用Python前因后果先上效果准备工作证件照尺寸调整证件照背景调整各种背景颜色图片完整代码结尾最后前因后果 事情是这样的 晚上我正在聚精会神写代码(打游戏~) 突然,收到学妹给我发来的消息 还有一张自拍照 而且是…

基于stm32单片机的超声波测距显示倒车雷达提醒报警系统Proteus仿真

资料编号:145 下面是相关功能视频演示: 145-基于stm32单片机的超声波测距显示倒车雷达提醒报警系统Proteus仿真(源码原理图仿真论文)设计内容 本次嵌入式课程设计综合实验的内容为倒车测距系统。以proteus keilU5为模拟硬件基础…