在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本是一个自己知道的问题,还是差点踩坑(差点忘了,还好上线前整理上线点时想起来了),特此记录下来 为什么要更新自增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.如果是个人测试库,不怎么重要,可以重启数据库 insert test (id,name) values (20,'eeee'); 操作后如图: 在执行下面SQL语句,对照结果 insert test (name) values ('ffff'); 此时自增id已从最大值开始自增了 找资料发现,这个BUG在2005年就被提出了,因为性能以及场景很少的没有被修复;这个问题在MySQL 8.0.11中表现正常。 到此这篇关于Mysql更新自增主键id遇到的问题的文章就介绍到这了,更多相关Mysql更新自增主键id内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论