千家信息网

如何解决Mysql更新自增主键id遇到的问题

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要为大家展示了"如何解决Mysql更新自增主键id遇到的问题",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何解决Mysql更新自增主键id遇到
千家信息网最后更新 2025年11月08日如何解决Mysql更新自增主键id遇到的问题

这篇文章主要为大家展示了"如何解决Mysql更新自增主键id遇到的问题",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何解决Mysql更新自增主键id遇到的问题"这篇文章吧。

为什么要更新自增id

我是因为历史业务上的坑,导致必须更新一批id,且为了避免冲突需要将id扩大多少倍进行更新,因为我这个表的数据数量不高,属于高读低写的情况,所以就简单的扩大了1000

问题

MySQL中如果我们把自增主键更新为更大的值(例如现在自增id最大值是1000,你更新id=49这个记录到id=1049),MySQL并不会把表的自增值修改为更新后的值,在某些情况下,如DDL,重启等之后,业务开始报错,这时如果不知道当前操作可能会误认为是当前业务操作的问题,实则是因为更新id埋下的坑(主键冲突)
如下图:

图1:更新前原始数据

执行更新语句

update test set id = 10 where id = 2;

图2:更新后的数据

执行新的插入语句

insert test (name) values ('dddd')

图3:插入的新数据

想必这时大家也都看出问题了,更新后可能刚开始没有问题,但当自增id追上你更新的最大值后,id冲突在所难免了。。。

如何解决

1.如果是个人测试库,不怎么重要,可以重启数据库
2.当然线上数据库是没法按照1这种方式搞了,除非你很任性(还需要dba陪着你任性),,,这时可以尝试指定id插入一条业务上无意义的数据,例如软删除的数据,(我的案列表没有软删除标识,大家可以意会下)

insert test (id,name) values (20,'eeee');

操作后如图:

在执行下面SQL语句,对照结果

insert test (name) values ('ffff');

此时自增id已从最大值开始自增了

找资料发现,这个BUG在2005年就被提出了,因为性能以及场景很少的没有被修复;这个问题在MySQL 8.0.11中表现正常。

以上是"如何解决Mysql更新自增主键id遇到的问题"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

更新 问题 数据 业务 最大 内容 最大值 篇文章 语句 冲突 任性 情况 数据库 学习 帮助 原始 重要 在所难免 不怎么 个人 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 济南博赛网络技术公司官网 河南调度服务器安装云服务器 荣耀软件开发测试 网络安全受骗数据 k2打印服务器 c 备份还原数据库 办公网络安全的常识教育宣传 计算机网络安全科技馆南京 怀旧服各个服务器哪个好 数据库的作用是储存数据么 微信小软件开发岗位说明书 服务器响应不安全怎么办 开设网络安全教育专业的大学 sql数据库删除旧的数据 单元格双击不显示数据库 电脑如何检测到连接服务器 湛江管理软件开发 数据库er图关系模式题库 西安网络安全监察部 住宅楼里可以放很多服务器吗 明日之后各种服务器升级 网络安全的题以及答案 DDL用来描述数据库的 华为服务器启动按键选择哪个 https 免费服务器 如何做到网络安全影响因素 数据库管理系统缺点 媒体融合数据库包括哪些内容 培训数据库日报范文 努力使网络安全防护到位
0