记一次MySQL自增ID用完了怎么办
记一次MySQL自增ID用尽后引发的错误
MySQL自增ID用完了一般分两种情况,第一种情况是MySQL表有主键;第二种情况是MySQL表没有主键。
1. 有主键
通常,我们设置主键的的时候一般都会把主键设置为自增。
MySQL里的int类型是4个字节,有符号位的话就是-2^31 ,
2 ^ 31-1如果没有符号位的话最大值就是2^32-1也就是2194967295。
环境准备:
CREATE TABLE `t_user` (`id` int NOT NULL AUTO_INCREMENT,`username` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2147483647 DEFAULT CHARSET=utf8mb4;
测试:
插入一条数据之后达到最大值。
INSERT INTO t_user(username) VALUES('张三');
可以插入成功。这样表里就有了一条有符号位的最大值上限的数据。
当再次执行,会报主键冲突。
INSERT INTO t_user(username) VALUES('张三');
INSERT INTO t_user(username) VALUES('张三')
> 1062 - Duplicate entry '2147483647' for key 't_user.PRIMARY'
> 时间: 0.001s
也就是说,如果设置了自增主键,当达到自增主键的上限的话,会报主键冲突的。
解决方案:MySQL自增主键类型设置为bigint类型,也就是8个字节。
2. 没有主键
如果没有设置主键的话,InnoDB会自动帮我们创建一个6字节的row_id作为主键。row_id是没有符号位的,所以最大值为2^48 -1。
当row_id超出最大限制,会覆盖之前的数据。这是我们不可以接受的。
总结
当MySQL自增ID用完之后,分两种情况:
- 当设置了主键,将会报主键冲突
- 当没有设置主键,数据库会帮我们自动生成一个全局的row_id,新数据会覆盖老数据
解决方案
- 设置主键的情况,修改自增主键的类型为bigint,因为int类型占4个字节,最大到2^32-1,大约是21亿,bigint占8字节, 大约2^64。
- 没有设置主键的情况,row_id虽然可以达到281万亿,但是会覆盖老的数据,不建议使用。
记一次MySQL自增ID用完了怎么办相关推荐
- mysql自增id用完了_MySQL 自增 ID 用完了怎么办?
MySQL 自增 ID 用完了怎么办? 在MySQL中有很多类型的自增ID,每个自增ID都设置了初始值,然后按照一定的步长增加,只要定义了字节长度,那么就会有上限,如果达到上限再次添加,则会报主键冲突 ...
- mysql自增id用完了_MySQL表自增id用完了该怎么办?
我们知道MySQL表可以定义一个自增长的id,如果我们的表没有指定主键字段,那MySQL会给我们的表创建一个不可见的,长度为6个自己的row_id,然后不停地往上加步长,虽然生活中自然数是没有上限的, ...
- mysql主键用完了怎么办_MySQL 自增 ID 用完了怎么办?
MySQL 自增 ID 用完了怎么办? 在MySQL中有很多类型的自增ID,每个自增ID都设置了初始值,然后按照一定的步长增加,只要定义了字节长度,那么就会有上限,如果达到上限再次添加,则会报主键冲突 ...
- 45 MySQL自增id
45 MySQL自增id 表定义自增id 说到自增id,前面提到mysql的自增id不连续,当表定义的自增值达到上限后的逻辑是:再申请下一个id时,得到的值保持不变 create table t(id ...
- mysql自动增长id 溢出_MySQL表自增id溢出的故障复盘怎么解决 MySQL表自增id溢出的故障复盘解决方法...
MySQL表自增id溢出的故障复盘如何解决?本篇文章小编给大家分享一下MySQL表自增id溢出的故障复盘解决方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题:MyS ...
- 修改 MySQL 自增ID的起始值
修改 MySQL 自增ID的起始值 alter table users AUTO_INCREMENT=10000; posted on 2019-04-15 17:45 流易 阅读(...) 评论(. ...
- mysql id会用完吗_数据库自增ID用完了会怎样?
起步 对DBA来说这应该是送分题吧.而我是突如其来的想法想测试下的.正常来说程序员是不会关心自增ID用完的情况的. 以 Mysql 为例,它支持的最大的整型是 unsigned bigint,上限是 ...
- 有关于mysql自增型需要返回id_关于mysql自增id,你需要知道的
关于mysql自增id,你需要知道的,主键,重启,索引,类型,字段 关于mysql自增id,你需要知道的 易采站长站,站长之家为您整理了关于mysql自增id,你需要知道的的相关内容. 导读:在使用M ...
- mysql自增id跳跃增长不连续,auto_increment_increment的问题
问题: 发现测试服务器上mysql自增id不连续,以8的倍数跳跃,像这样8,16,24,32... 查找网上资料大多说的都是起始id不是从1开始,或者删除后再插入id不连续... 我的情况是,id不连 ...
最新文章
- Java NIO 系列教程 转
- linux如何导入种子文件格式,在 Linux 上使用 transmission 制作种子
- Python基础-闭包
- Python time 获取本地时间戳(包含毫秒)
- vs2010括号不成对_C++ VS2010 括号匹配 求强人解答
- mysql 表列表_一个MySQL表中的多列表显示
- sklearn常用聚类算法模型【KMeans、DBSCAN】实践
- 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.6
- 金蝶服务器显示已离线,金蝶K3提示云服务器已离线
- 天牛群,天牛须结合粒子群算法BAS-PSO。研究生阶段毕生所 学,低价出售!可定制pid参数整定。
- java拨号上网,Android实现pppoe拨号上网(二)具体步骤
- 音乐 美术 劳技 计算机教研组工作总结,综合教研组教学工作总结
- python valueerror object2_Python使用json.loads 报错 ValueError: No JSON object could be decoded的解决方法...
- 【R】【课程笔记】07 分位数回归与VaR(ES)计算
- 哈尔滨傲澜智伴机器人_智伴机器人品质保证(在线咨询),机器人
- 如何打造一个可躺赚的网盘项目,每天只需要2小时
- 日历程序,支持添加日程提醒
- 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】
- 学习率和数据集规模_数据集和数据
- 【代码篇】通过三维坐标在CAD里自动输出三维模型