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

Python的单元测试之unittest 是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。unittest 提供了自动匹配发现并执行测试用例的功能,随着项目代码结构越发庞大,势必有多个测试文件,自动匹配发现并测试用例的功能在此就显得非常有用,只要满足。unittest 提供了丰富的命令行入口,可以根据需要执行某些特定的用例。的测试用例都会被 unittest 发现并执行,测试用例文件的默认匹配规则为 test*.py。 阅读详情

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');

操作后如图:

指定id插入
在执行下面SQL语句,对照结果

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

对照结果
此时自增id已从最大值开始自增了

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

openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案 本文主要介绍了openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用openclaw-cn的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 阅读详情

相关推荐

vcs 覆盖率收集1——三种覆盖率类型、covergroup、bins、数据采样、覆盖率选项

介绍各种覆盖率,以及如何编写覆盖率收集的代码

qq_42135020的博客 1万+

Mysql为何建议使用自增id作主键,有什么优点

B+ 树为了维护索引有序性,在插入新值的时候需要做必要的维护。如果插入的值比最大值id大,则只需要最后记录后面插入一个新记录。如果新插入的ID值在原先的有序中间,就相对麻烦了,需要逻辑上挪动后面的数据,空出位置。如果所在的数据页已经满了,根据 B+ 树的算法,这时候需要申请一个新的数据页,然后挪动部分数据过去。这个过程称为页分裂。在这种情况下,性能自然会受影响。 除了性能外,页分裂操作还影响数据页的利用率。原本放在一个页的数据,现在分到两个页中,整体空间利用率降低大约 50%。 当然有分裂就有合并。当相邻两

write less , do more 1万+

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--地图(一)

上面3章图是完成后的效果图 游戏已完成,除了英雄外,基本还原了90%的游戏内容,一共13关,20种防御塔,30+种敌人,如上图,以假乱真吧 下面从地图模块起介绍我的方法,如有更好的方法,请留言一起讨论,游戏资源下载原版游戏数据包,解压即可 推荐一款软件,TextureUnpackerRelease1.04可以分割plist形式的图片,提高效率 经过一个月学习也发现之前有很多化简为繁的错误

7173

MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入

一、ON DUPLICATE KEY UPDATE的介绍 二、ON DUPLICATE KEY UPDATE的使用 2.1、案例一:根据主键id进行更新 2.2、案例二:根据唯一索引进行更新(常用) 2.3、案例三:没有主键或唯一键字段值相同就插入 2.4、案例四:主键与唯一键字段同时存在 三、ON DUPLICATE KEY UPDATE的注意事项 3.1、on dupdate key update之后values的使用事项 3.2、对values使用判断 3.3、唯一索引大小写敏感问题 四、ON DUP

weixin_49114503的博客 3万+

Grey Hack v0.7.3618 保姆级教程:手把手教你用metaxploit.so写一个自动提权脚本

本文详细介绍了如何在Grey Hack v0.7.3618中使用metaxploit.so库编写自动化提权脚本。从环境准备到核心功能解析,再到漏洞利用链构建和权限提升的智能处理,手把手教你掌握游戏中的高级黑客技巧。通过多库联合利用和错误处理优化,提升脚本的效率和成功率。

weixin_42537919的博客 396

一分钟教会你搭建steam新游幻兽帕鲁服务器

总结: 游戏对服务器搭建要求相对较高、且对服务器网络协议有要求不能封堵UDP、多开、游戏运行久、同时在线人数多了这些会很吃内存 我自己用的64G内存多开4区测试玩家同时在线50多人的情况下内存已经跑满了、对于想用服务器搭建联机的小伙伴建议根据开区数量以及玩家人数去选择配置、当然也可以直接找我阿杰购买、我可以提供技术搭建服务。注:如果用的是本地电脑局域网搭建直接输入127.0.0.1:8211就行 如果用的是服务器搭建输入自己服务器IP+端口或解析的域名+端口进入游戏。

用最简单的方式说最重要的事!服务器、存储、云计 算、A智能的大数据产品、游戏开发技术。致力于广 大开发者、政企用户、各项机构等,构建云上世界提供全方位云计算解决方案。旨在打造差异化的开放式闭环生态系统帮助用户快速构建稳定、安全的云计算环境。 2238

mysql 更新主键id_MYSQL获取更新行的主键ID

在某些情况下我们需要向数据表中更新一条记录的状态,然后再把它取出来,但这时如果你在更新前并没有一个确认惟一记录的主键就没有办法知道哪条记录被更新了。举例说明下:有一个发放新手卡的程序,设计数据库时常见的方案有两种:方案一:使用一张表,新手卡和领取记录都在一起,这样主要字段就是新手卡(主键)、用户ID(惟一)、领取状态(非必要)等这样的话数据库操作就简单了,直接一条update sql,将用户id更...

weixin_31879641的博客 1586

告别手动操作!用Python脚本批量处理Siemens NX零件文件(导入/导出/移除参数)

本文详细介绍了如何利用Python脚本实现Siemens NX零件文件的批量处理,包括导入、导出和移除参数等操作。通过NX Open API和Python UF接口,工业设计师可以大幅提升工作效率,告别繁琐的手动操作。文章提供了完整的实战指南,涵盖环境配置、核心功能实现以及性能优化技巧,特别适合需要进行Siemens-NXUG二次开发的工程师参考。

weixin_28222493的博客 261

Mysql 主键自增

Mysql 主键自增

阿涩的博客 2758

算法设计与分析 0-1背包问题 动态规划解法【超详细】

0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C。 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有全部装入背包或不装入背包两种选择。 物品不能分割,不能重复使用。 动态规划算法思路 首先建立一个数组B[i][c],最上面一行表示背包容量,最左边一列表示物品编号,中间填充的数值表示当当前背包容量为C...

寒泉 4万+

AutoModelForCausalLM 加载失败:flash_attn 缺失的三种解决方案

本文针对使用AutoModelForCausalLM加载大语言模型时因缺失flash_attn依赖而报错的问题,提供了三种实用解决方案。最推荐通过修改模型配置文件或代码动态指定注意力实现为“eager”模式来绕过检查,也介绍了临时修改库源码的应急方法,并解释了flash_attn的作用及正确安装指南。

html8的博客 269

mysql 重新生成连续的主键ID

如何实现“mysql重新生成连续的主键ID” 表格展示步骤: 步骤 操作 1 创建一个临时表,并将原表数据导入临时表 2 删除原表 3 重新创建原表,并设置主键ID为自增长 4 将临时表数据导入原表 每一步需要做什么: 步骤1:创建一个临时表,并将原表数据导入临时表 登录后复制 CREAT...

weixin_36628615的博客 211

硬件手册——PT100精密测温电路

PT100精密测温电路 一、需求分析 根据题目要求为:测温范围为0-100℃、测温精度要求为±1℃。由于铂电阻具有精度高、性能可靠、稳定性好的特点,且铂电阻的电阻相对变化率与温度的关系曲线线性度最好,故选择铂电阻作为敏感元件。而在国标中,铂电阻有几种不同的标准,如PT100、PT1000。分别对应着0摄氏度下铂电阻的阻值为100R和1000R,由于需要考虑铂电阻的自发热问题,所以尽量选择阻值小的铂电阻,故选择PT100为最终型号。 二、电路设计 2.1 热电阻接法 热电阻测温电路有多种接法,其中三线制会导致

weixin_41655430的博客 5万+

MySQL 主键自增,会出现跳键

MySQL 主键自增,会出现跳键 这个表记录的是设备的心跳数据,记录设备第一次上传心跳的时间和最后一次上传数据的时间 我的sql: insert into tb_ap_heart (ap_id, create_time, update_time) values (#{apId,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, ...

羸鹄的博客 5088

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

探究postgres 自增列有值情况下插入时,如何维护主键id自增

docker、postgres11.14、navicatdocker pull postgres:11.14mkdir -p /docker/postgresql/data/ 如果没有挂载目录,自动创建。 位置:docker inspect id | grep Mounts -A 50 查看关于Mounts记录的50行 验证删除容器后,默认挂载目录不会消失,但是建议挂载,因为挂载volume id不好记 操作如下,docker stop $(docker ps -qa) && docker rm $(do

tang_world的博客 1056

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mysql数据库id自增不连续_MySQL自增id不连续

要修改的自增ID不是外键解决article表主键id不连续 //先删除不连续的主键ALTER TABLE article DROP COLUMN article_id;//再重新建立自增的主键ALTER TABLE article ADD article_id TINYINT(4) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST; 要修改的自增ID是外键...

weixin_42361608的博客 1104

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL中自增主键不连续之解决方案。

今天只做了一件事情,但解决了很大的问题。相信这也是令很多程序员和数据库管理员头疼的事情。 假设在一MySQL数据表中,自增的字段为id,唯一字段为abc,还有其它字段若干。 自增:AUTO_INCREMENT A、使用insert into插入数据时,若abc的值已存在,因其为唯一键,故不会插入成功。但此时,那个AUTO_INCREMENT已然+1了。 eg : i

奋斗的日子最甜美,在科技的海洋里,永无止境。 1万+

MySQL建表,删表,更新字段

MySQL创建表,删除表,更新表字段及遇到的问题 创建表 CREATE TABLE collect_activity( id INT NOT NULL AUTO_INCREMENT, collect_time datetime, activity_id INT NOT NULL, oppenId INT NOT NULL, integral INT NULL DEFAULT 5, PRIMAR...

qq_40420214的博客 466

MySQL主键自增长报duplicate_mysql 使用ON DUPLICATE KEY UPDATE 时导致的自增主键id无限增大问题...

mysql 版本:5.7python版本:3.7问题描述:mysql表A中数据有几十条,设置了一个自增 1 的id作为主键,在程序运行一段时间后发现表中最后一条数据的id已经是几百万了表中所有数据如下:可以看到最大的一条id已经是四百多万了,并且id是不连续的操作表的sql语句为:sql = "INSERT INTO table A(xx, xx, xx, xx) VALUES('{xx}', ...

weixin_42131352的博客 864

MySQL获取自增序列

因为业务要求,需要在MySQL数据库中,获取下一个自增主键的值。 原先采用的方法是: select AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = '数据库名称' AND TABLE_NAME = '表名称' limit 1 但是这样写的话,在8.0以后的版本是取不到值的,必须在每一次需要获取自增序列之前...

夏至的博客 1万+

mysql表自增重置

Mysql数据备份--重置自增id注意!!!第一步第二步:把id都设置为0第三步:重新设置主键id和自增完成参考 注意!!! 如表数据过大的情况下操作时间会很长,请在没有业务操作的情况下操作!!!不然业务会炸的 操作前备份。 如果这个id有关联别的表,要同步修改,否则就会悲剧。 第一步 进入编辑表,将表的主键id和自增去掉 第二步:把id都设置为0 update table(表名) set id = ‘0’; 第三步:重新设置主键id和自增 完成 参考 https://www.sohu.com/a/2

cucaonansheng的博客 2530

【震惊!原神高手竟然这么操作?!】MySQL重置当前数据表中自增ID,不影响数据表的顺序和内容

【震惊!原神高手竟然这么操作?!】MySQL重置当前数据表中自增ID,不影响数据表的顺序和内容

原神高手的博客 667

MySQL删除自增索引,mysql添加自增索引后一个报错解

现在有一个mysql数据库表,需要给主键加上自增。很容易可以找到命令类似于下面这样alter table `table_name`change column `id``id` int(10) unsigned auto_increment not null ;但是,一直没问题的代码这次失效了,报错如下:ERROR 1062: ALTER TABLE causes auto_increment re...

weixin_35792468的博客 289

MySql重新编号自增主键

思路:创建一个中间表,将原表数据插入中间表时重新生成连续的自增主键,然后再把数据更新回原表。这种方法可以避免直接删除和重建原表可能带来的外键关联等问题。背景:由于删除MySql表中删除数据的原因,导致表中自增主键id号码混乱,需重新编号,本文提供以下两种解决思路。对于简单的数据结构和较小的数据量,可以通过设置临时变量和使用更新语句来逐个调整自增主键的值,使其连续。

weixin_61161835的博客 1144

mysql获取上条的id_mybatis批量update,返回行数为-1

项目中用到了批量更新. 在开发当中,可能经常会遇到批量处理这种情况,一般都再在java层面进行, 其本质是节省数据库连接打开关闭的的次数,占用更少的运行内存. 下面先记一下批处理映射吧: mybatis批量插入 mybatis批量更新返回结果为-1,是由于mybatis的defaultExExecutorType引起的, 它有三个执行器:SIMPLE 就是普通的执行器:REUSE 执行器会...

weixin_39897267的博客 1835

mysql重新设置主键生成策略为auto_increment时报错:resulting in dup

现在有一个标签表,里面已经填入了一些数据了,想把主键生成策略改成自增的:ALTER TABLE `tags` CHANGE COLUMN `Id` `Id` INT(11) NOT NULL AUTO_INCREMENT但是发现改不了,报错:ERROR 1062: ALTER TABLE causes auto_increment resequencing, resultin...

weixin_33813128的博客 217
上一篇: mac终端展示分支名称
下一篇: 云服务器安装mysql
code1Boy
博客等级 码龄10年 45粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值