记一次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用完了怎么办相关推荐

  1. mysql自增id用完了_MySQL 自增 ID 用完了怎么办?

    MySQL 自增 ID 用完了怎么办? 在MySQL中有很多类型的自增ID,每个自增ID都设置了初始值,然后按照一定的步长增加,只要定义了字节长度,那么就会有上限,如果达到上限再次添加,则会报主键冲突 ...

  2. mysql自增id用完了_MySQL表自增id用完了该怎么办?

    我们知道MySQL表可以定义一个自增长的id,如果我们的表没有指定主键字段,那MySQL会给我们的表创建一个不可见的,长度为6个自己的row_id,然后不停地往上加步长,虽然生活中自然数是没有上限的, ...

  3. mysql主键用完了怎么办_MySQL 自增 ID 用完了怎么办?

    MySQL 自增 ID 用完了怎么办? 在MySQL中有很多类型的自增ID,每个自增ID都设置了初始值,然后按照一定的步长增加,只要定义了字节长度,那么就会有上限,如果达到上限再次添加,则会报主键冲突 ...

  4. 45 MySQL自增id

    45 MySQL自增id 表定义自增id 说到自增id,前面提到mysql的自增id不连续,当表定义的自增值达到上限后的逻辑是:再申请下一个id时,得到的值保持不变 create table t(id ...

  5. mysql自动增长id 溢出_MySQL表自增id溢出的故障复盘怎么解决 MySQL表自增id溢出的故障复盘解决方法...

    MySQL表自增id溢出的故障复盘如何解决?本篇文章小编给大家分享一下MySQL表自增id溢出的故障复盘解决方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题:MyS ...

  6. 修改 MySQL 自增ID的起始值

    修改 MySQL 自增ID的起始值 alter table users AUTO_INCREMENT=10000; posted on 2019-04-15 17:45 流易 阅读(...) 评论(. ...

  7. mysql id会用完吗_数据库自增ID用完了会怎样?

    起步 对DBA来说这应该是送分题吧.而我是突如其来的想法想测试下的.正常来说程序员是不会关心自增ID用完的情况的. 以 Mysql 为例,它支持的最大的整型是 unsigned bigint,上限是 ...

  8. 有关于mysql自增型需要返回id_关于mysql自增id,你需要知道的

    关于mysql自增id,你需要知道的,主键,重启,索引,类型,字段 关于mysql自增id,你需要知道的 易采站长站,站长之家为您整理了关于mysql自增id,你需要知道的的相关内容. 导读:在使用M ...

  9. mysql自增id跳跃增长不连续,auto_increment_increment的问题

    问题: 发现测试服务器上mysql自增id不连续,以8的倍数跳跃,像这样8,16,24,32... 查找网上资料大多说的都是起始id不是从1开始,或者删除后再插入id不连续... 我的情况是,id不连 ...

最新文章

  1. Java NIO 系列教程 转
  2. linux如何导入种子文件格式,在 Linux 上使用 transmission 制作种子
  3. Python基础-闭包
  4. Python time 获取本地时间戳(包含毫秒)
  5. vs2010括号不成对_C++ VS2010 括号匹配 求强人解答
  6. mysql 表列表_一个MySQL表中的多列表显示
  7. sklearn常用聚类算法模型【KMeans、DBSCAN】实践
  8. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.6
  9. 金蝶服务器显示已离线,金蝶K3提示云服务器已离线
  10. 天牛群,天牛须结合粒子群算法BAS-PSO。研究生阶段毕生所 学,低价出售!可定制pid参数整定。
  11. java拨号上网,Android实现pppoe拨号上网(二)具体步骤
  12. 音乐 美术 劳技 计算机教研组工作总结,综合教研组教学工作总结
  13. python valueerror object2_Python使用json.loads 报错 ValueError: No JSON object could be decoded的解决方法...
  14. 【R】【课程笔记】07 分位数回归与VaR(ES)计算
  15. 哈尔滨傲澜智伴机器人_智伴机器人品质保证(在线咨询),机器人
  16. 如何打造一个可躺赚的网盘项目,每天只需要2小时
  17. 日历程序,支持添加日程提醒
  18. 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】
  19. 学习率和数据集规模_数据集和数据
  20. 【代码篇】通过三维坐标在CAD里自动输出三维模型

热门文章

  1. 教你买卖二手车不可不知的术语
  2. 真相只有一个 !God.Game 代币被盗事件原理分析
  3. “猜你喜欢”后台设计方案
  4. 升级linux4.9 故障,CentOS 4升级到4.9
  5. Python 中删除文件的几种方法 【赶紧收藏】
  6. 统计学中关于自由度的详细解释以及求平均值为什么消耗自由度1
  7. java面试总结点(1)
  8. AAA配置与管理——1
  9. Xftp中汉字文件夹名显示乱码解决方案
  10. 三星率先推出全球首款可3G上网Gear S智能手表