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

工业级4~20mA转0~3V信号调理电路原理图设计,已量产(电流传感器) 在工业现场,4~20mA 电流信号是模拟量传输的 “老熟人”—— 抗干扰强、能跑长距离,但嵌入式 MCU 的 ADC 一般只认电压信号。最近做项目时,我设计了一款能覆盖 0~25mA(含超量程冗余)、线性输出 0~3V 的调理电路,经过现场调试挺稳定,分享下细节。 阅读详情

来源:程序猿面试指南

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

首先,创建一个最简单的表,只包含一个自增 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,存在主键冲突的可能性。

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


(完)

二、TCP/IP协议之网络层(IP地址的格式、分类、报文格式) 数据报每经过一个路由器,路由器都要重新计算一下首部检验和,若首部未发生变化,则此结果必为 0,于是就保留这个数据报。对于网络号相的设备,无论实际所处的物理位置如何,它们都是处在同一个网络中。在首部的固定部分的后面是一些可选字段,其长度是可变的。IPv4 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段。表示数据报在网络中的寿命,英文缩写是 TTL(Time To Live),功能是“跳数限制”。地址的网络号码字段用来标识一个网络,网络号码字段的前几位用来区分。 阅读详情

相关推荐

STK中的传感器与通信组件:雷达、发射机、接收机与天线的协同建模

本文深入解析了STK软件中传感器、雷达、发射机、接收机与天线的协同建模方法。通过构建一个完整的卫星对地数传系统实例,阐述了各组件如何分工协作,实现从几何指向到射频链路的高保真仿真,为复杂航天通信与探测系统的设计与分析提供了高效、灵活的解决方案。

weixin_29271263的博客 273

关于主键id长度不够用蛋疼思考

前言:一般bigint都够用,下面根据不同的情况,分析,解决不同的问题 1 之前建表类型为int,现在不够用了怎么办? 改bigint 2 虽然是bigint,但是因为经常删除新增数据,导致id增长非常快,预计过一段时间就会超长 可以另外维护一张表,专门记录可用不可用的id,每次插入数据请求接口查询可用的最小id 其他思考:并发量高?可以多查一些放到redis里 其他思考:现在旧数据都是假删除,重新插入也会影响数据,旧数据已删除...

我思故我在 807

字节跳动程序媛教你如何刷算法题:面试手撕代码我就没怕过

本人上一次刷题还是大一的C语言期末考试……但是面试中算法考核截止上岸前一直保持着100%正确率的光辉记录。 本文将给你指明一条刷题的决胜指南。并从算法的重要性、题库的选择以及刷题的三大步骤分别进行讲解,彻底解决你所有关于面试算法所有的困扰。

Stay Hungry Stay Foolish 求知若饥 虚心若愚 2万+

MySQL的自增 ID 用完了,怎么办?

Java面试笔试面经、Java技术每天学习一点公众号Java面试关注我不迷路如果你用过或了解过MySQL,那你一定知道自增主键了。每个自增id都是定义了初始值,然后按照指定步长增长(默认步...

java面试笔试 421

从防御者视角复盘:用WinArpAttacker和Wireshark在Windows上模拟并检测ARP欺骗攻击

本文详细解析了Windows平台下的ARP欺骗攻击与防御策略,通过WinArpAttacker和Wireshark工具模拟攻击并检测异常流量。文章涵盖实验环境搭建、攻击原理深度解析、流量特征分析及企业级防御方案,帮助安全运维人员全面掌握ARP攻击检测与防护技术。

weixin_30918633的博客 122

基于cat12和SPM12进行VBM&SBM数据分析笔记1——数据预处理

基于cat12数据分析基础教程笔记 今年是小编步入研究生生活的第一年,研究方向待定,但主要以磁共振成像为主,以后会不断地总结这方面的知识,涉及MRI扫描,数据分析基础方法理论,软件操作教程,文献阅读笔记总结等等,用来记录我的研究生三年学习过程。编写尽量简洁明了,通俗易懂,本就是小白,也能体会小白的痛。不过这也要谢谢一个人手动@小白(网名),是他教我要把自己所学的写下来,讲出来才能真正的做到输入和输出,查漏补缺。而cat12软件操作是我面临的第一个数据分析的训练,写的可能也不会非常到位,还望各位专业人士指出改

Sophia2023的博客 4万+

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

可能导致ID重复(若旧数据未被彻底删除),仅适用于临时救急场景。值重新利用空闲ID。50+项技能树Checklist,快速定位技术短板!剑指Offer最优解合集,算法刷题必备神器!现代C++异步任务调度框架,提升开发效率!高性能网络库源码,深入理解事件驱动编程!涵盖23个核心考点,助你轻松应对面试!若表中存在已删除的旧数据,可通过调整。:操作简单,快速恢复插入功能。

C语言实战大全 1590

一文搞懂什么是OTA(空中升级)

OTA(Over-The-Air,空中升级)是一种通过无线通信技术实现远程更新设备固件或软件的方法。这项技术广泛应用于现代物联网(IoT)设备、智能手机、汽车、嵌入式系统等领域,提供了一种无需物理连接的便捷更新方式。OTA更新的核心在于使设备能够自动、可靠、安全地从远程服务器获取和应用更新,改善设备性能、添加新功能或修复安全漏洞。

不积跬步无以至千里 7万+

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

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

田维常 547

基于Mind+、MOTT实现人工智能

@基于Mind+、MOTT实现人工智能 人工智能实验 一、实验目的及要求 【一】实现人脸识别 【二】实现云数据库应用 【三】实现测温数据mqtt上传至物联网云平台 二、实验原理与内容 基于二哈实现多人人脸学习和识别 基于TinywebDB实现云数据库应用 基于EasyIoT实现mqtt数据上传。 三、实验软硬件环境 硬件:掌控板 软件:Mind+ 四、实验过程(实验步骤、记录、数据、分析) 1.基于二哈实现多人人脸学习和识别 ①在Mind+扩展上的传感器选项选择HUSKYLENS AI 摄像头 ②配置哈士

weixin_44606930的博客 2379

AI编码规则:从提示工程到自动化,提升大模型生成代码质量

在软件工程领域,代码质量是保障软件可维护性、安全性和团队协作效率的核心。其背后遵循着从基础语法规范到架构设计原则的一系列工程实践。随着大语言模型(LLM)在代码生成任务中的广泛应用,如何确保AI生成的代码符合这些工程标准,成为一个关键的技术挑战。这涉及到将人类工程师积累的最佳实践,转化为机器可理解、可执行的明确约束。通过系统化的**编码规则**定义与集成,例如构建涵盖安全、风格、架构的多层次规则集,并将其融入**提示工程**或自动化工作流,可以显著引导AI产出更健壮、规范的代码。这种方法的价值在于,它能将模

weixin_42525189的博客 643

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

如果你用过或了解过MySQL,那你一定知道自增主键了。每个自增id都是定义了初始值,然后按照指定步长增长(默认步长是1)。虽然,自然数是没有上限的,但是我们在设计表结构的时候,通常都会指定...

weixin_38754337的博客 98

化工设备应力分析软件:STAAD.Pro二次开发_(24).非线性分析技术

在STAAD.Pro 中,可以通过命令。

kkchenjj的博客 662

面试官问:MySQL的自增ID用完了,怎么办?!

既然这块知识点不清楚,那回头就自己动手实践下。 首先,创建一个最简单的表,只包含一个自增id,并插入一条数据: ——————— create table t0(id int unsigned auto_increment primary key) ; insert into t0 values(null); ————————————————▲ 通过show命令show create...

HUYA69的博客 712

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mysql主动自增可以_面试官问:MySQL 的自增 ID 用完了,怎么办?

本文转载自【微信公众号:java进阶架构师,ID:java_jiagoushi】经微信公众号授权转载,如需转载与原文作者联系首先,创建一个最简单的表,只包含一个自增 id,并插入一条数据。create table t0(id int unsigned auto\_increment primary key) ;insert into t0 values(null);通过 show 命令show c...

weixin_36079559的博客 164

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 使用 JWT 来保护你的 SpringBoot 应用
下一篇: 上海有哪些牛逼的互联网公司?
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值