点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试文章

来源:程序猿面试指南

既然这块知识点不清楚,那回头就自己动手实践下。

首先,创建一个最简单的表,只包含一个自增id,并插入一条数据。

create table t0(id int unsigned auto_increment primary key) ;insert into t0 values(null);

通过show命令 show create table t0; 查看表情况

CREATE TABLE `t0` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

可以发现 AUTO_INCREMENT 已经自动变成2,这离用完还有很远,我们可以算下最大当前声明的自增ID最大是多少,由于这里定义的是 intunsigned,所以最大可以达到2的32幂次方 - 1 = 4294967295

这里有个小技巧,可以在创建表的时候,直接声明AUTO_INCREMENT的初始值

create table t1(id int unsigned auto_increment primary key)  auto_increment = 4294967295;insert into t1 values(null);

同样,通过show命令,查看t1的表结构

CREATE TABLE `t1` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4294967295 DEFAULT CHARSET=utf8

可以发现,AUTO_INCREMENT已经变成4294967295了,当想再尝试插入一条数据时,得到了下面的异常结果

17:28:03    insert into t1 values(null) Error Code: 1062. Duplicate entry '4294967295' for key 'PRIMARY'    0.00054 sec

明,当再次插入时,使用的自增ID还是 4294967295,报主键冲突的错误。

4294967295,这个数字已经可以应付大部分的场景了,如果你的服务会经常性的插入和删除数据的话,还是存在用完的风险,建议采用bigint unsigned,这个数字就大了。

不过,还存在另一种情况,如果在创建表没有显示申明主键,会怎么办?

如果是这种情况,InnoDB会自动帮你创建一个不可见的、长度为6字节的row_id,而且InnoDB 维护了一个全局的 dictsys.row_id,所以未定义主键的表都共享该row_id,每次插入一条数据,都把全局row_id当成主键id,然后全局row_id加1

该全局row_id在代码实现上使用的是bigint unsigned类型,但实际上只给row_id留了6字节,这种设计就会存在一个问题:如果全局row_id一直涨,一直涨,直到2的48幂次-1时,这个时候再+1,row_id的低48位都为0,结果在插入新一行数据时,拿到的row_id就为0,存在主键冲突的可能性。

所以,为了避免这种隐患,每个表都需要定一个主键。

热门内容:Java 生鲜电商平台 - API 接口设计之 token、timestamp、sign 具体架构与实现面试官:我把数据库部署在Docker容器内,你觉得如何?
炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现
为什么 SQL 语句不要过多的 join?最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡

面试官问:MySQL 的自增 ID 用完了,怎么办?相关推荐

  1. 面试官问:如果MySQL的自增 ID 用完了,怎么办?

    欢迎关注方志朋的博客,回复"666"获面试宝典 如果你用过或了解过MySQL,那你一定知道自增主键了.每个自增id都是定义了初始值,然后按照指定步长增长(默认步长是1).虽然,自然 ...

  2. 怎么定义int_面试官问:MySQL的自增ID用完了,怎么办?!

    既然这块知识点不清楚,那回头就自己动手实践下. 首先,创建一个最简单的表,只包含一个自增id,并插入一条数据: ------- create table t0(id int unsigned auto ...

  3. 如果MySQL的自增 ID 用完了,怎么办?

    作者 | 方志朋 来源 | https://mp.weixin.qq.com/s/Yqo5PaTtQcQTn4p8BE6SGg 如果你用过或了解过MySQL,那你一定知道自增主键了.每个自增id都是定 ...

  4. 面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?

    以下文章来源方志朋的博客,回复"666"获面试宝典 最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多. 为了节约成本,定期进行数 ...

  5. .jar中没有主清单属性_面试官问:为什么SpringBoot的 jar 可以直接运行?

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | https://urlify.cn/uQvIna SpringBoot提供了一个插件spring-boot-mav ...

  6. 【176期】面试官:MYSQL 表数据 delete 删除后,为何还占用存储空间?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:35 更新文章,每天进步一点点... ...

  7. 【169期】面试官问:说说为什么要限流,有哪些解决方案?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜留言必回,有问必答! 每天 08:35 更新文章,每天进步一点点... ...

  8. 线上 MySQL 的自增 id 用尽怎么办?被面试官干趴下了!

    点击下方"Java编程鸭"关注并标星 更多精彩 第一时间直达 MySQL的自增id都定义了初始值,然后不断加步长.虽然自然数没有上限,但定义了表示这个数的字节长度,计算机存储就有上 ...

  9. 【283期】面试官问:高并发场景下,如何保证全局唯一分布式 ID 生成?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 前言 系统 ...

最新文章

  1. Nature子刊封面:澳大真菌研究新突破 有助降低免疫力弱人群受真菌感染的风险...
  2. 阿里云视频点播获取视频点播的video信息
  3. 【风险管理】风控一二三
  4. xtrabackup压缩备份多线程备份(lz4,pigz)全详解
  5. 调查显示:数据中心行业女性获得报酬比男性多
  6. 4.2创建自定义Spring Boot自动配置Starter
  7. linux安装后root密码错误,linux新安装后root密码设置
  8. et中计算机的快捷键,新手求助ET软件快捷键(求实用型的)
  9. bin 转hex方法
  10. 【ACM】- PAT. A1064 Complete Binary Serach Tree 【BST】
  11. Assembler - 循环程序设计
  12. SpringMVC类型转换遇到的问题
  13. 华人小哥打造乔布斯版ChatGPT,网友:感觉他复活了
  14. Fedora12 编译s3c2416 U-Boot1.3.4的Makefile和头文件
  15. Servlet.service() for servlet SpringMVC threw exception ---- java.lang.NullPointerException
  16. 三维目标检测之ROS可视化
  17. MVG读书笔记——射影变换的校正(二)
  18. 数字安全使企业关注CISO汇报架构
  19. java篇:自学Java到底需要多久呢?
  20. [附源码]SSM计算机毕业设计美容院业务管理系统JAVA

热门文章

  1. Python3 xml模块的增删改查
  2. Java 常用对象-Date类和Calender类
  3. Android PackageManager packages.xml文件格式
  4. PHP-密码学算法及其应用-对称密码算法
  5. adoquery查询结果如何赋给一个变量(delphi和c++ builder)
  6. 【青少年编程】【一级】小镇一日游
  7. LeetCode实战:二叉树中的最大路径和
  8. 冬奥会夺金的背后杀手锏,竟是位 AI 虚拟教练
  9. 比Python 3.8快20%,Pyston v2正式发布
  10. 微软亚洲研究院副院长刘铁岩:AI如何助力节能减排?