千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"如何解决Mysql更新自增主键id遇到的问题",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何解决Mysql更新自增主键id遇到
千家信息网最后更新 2026年11月01日如何解决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安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 互联网科技公司起名 为想互联网科技 杭州互联网科技公司 北京禾田雨橡互联网科技 菲比寻常互联网科技 互联网科技大会案例 四个字互联网科技公司取名 科技互联网的估值 互联网科技商业 华夏恒生互联网科技013171 特约风豹互联网科技为什么扣费 互联网金融科技名词解释 无锡工业互联网科技有限公司 上海科技产业互联网平台 湖北辰鑫科技互联网 科技互联网公司两年变化 青岛易易互联网科技 互联网科技创新方面的资料 宁波允成互联网科技有限公司 蓝思科技飞鸽互联网 盈实互联网科技 北京禾田雨橡互联网科技 广州优美互联网科技 湖南一路畅行互联网科技 电子科技大学互联网创业大赛 华中科技大学互联网的牛人 四川互联网展示科技馆设计 半导体行业属于互联网高科技类吗 华人运通互联网科技公司
0