Mysql更新自增主键id遇到的问题

作者:code1Boy 时间:2024-01-17 23:56:02 

本是一个自己知道的问题,还是差点踩坑(差点忘了,还好上线前整理上线点时想起来了),特此记录下来

为什么要更新自增id

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

问题

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

图1:更新前原始数据

Mysql更新自增主键id遇到的问题

执行更新语句


update test set id = 10 where id = 2;

图2:更新后的数据

Mysql更新自增主键id遇到的问题

执行新的插入语句


insert test (name) values ('dddd')

图3:插入的新数据

Mysql更新自增主键id遇到的问题

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

如何解决

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


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

操作后如图:

Mysql更新自增主键id遇到的问题

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


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

Mysql更新自增主键id遇到的问题

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

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

来源:https://blog.csdn.net/code1Boy/article/details/121589152

标签:Mysql,自增主键id
0
投稿

猜你喜欢

  • 数据库中的SELECT语句逻辑执行顺序分析

    2024-01-28 06:32:18
  • Python中列表(List) 的三种遍历(序号和值)方法小结

    2022-08-24 23:17:39
  • Python+OpenCV采集本地摄像头的视频

    2021-12-06 23:11:31
  • Golang 使用Map实现去重与set的功能操作

    2024-02-21 14:54:21
  • JavaScript实现同步于本地时间的动态时间显示方法

    2024-05-11 09:33:19
  • Python实现按中文排序的方法示例

    2023-11-29 15:19:22
  • 视觉对交互的帮助——提升可用性

    2008-10-16 13:16:00
  • python两个_多个字典合并相加的实例代码

    2023-05-05 07:50:33
  • javascript打印html内容功能的方法示例

    2024-04-25 13:13:23
  • numpy中三维数组中加入元素后的位置详解

    2021-02-28 10:25:14
  • python opencv鼠标画点之cv2.drawMarker()函数

    2021-11-28 18:34:40
  • sqlserver 复制表 复制数据库存储过程的方法

    2024-01-21 17:01:00
  • python3 googletrans超时报错问题及翻译工具优化方案 附源码

    2022-07-15 12:05:47
  • django反向解析URL和URL命名空间的方法

    2022-05-28 20:35:09
  • 制作设置404页面

    2009-07-03 13:01:00
  • PHP实现的curl批量请求操作示例

    2023-11-17 01:51:10
  • 图神经网络GNN算法基本原理详解

    2023-08-08 23:53:53
  • Python读取hdf文件并转化为tiff格式输出

    2021-02-22 18:59:56
  • oracle修改scott密码与解锁的方法详解

    2024-01-19 19:10:40
  • Sql Server、Oracle以及Access数据库 判断字段是否为空的办法 (From calmzeal's code life)

    2011-02-24 19:44:00
  • asp之家 网络编程 m.aspxhome.com