MySQL RR (Repeatable Read) 隔离级别规则细节
准备
测试表:
CREATE TABLE `transaction_test`
(`id` int,`value` int,`mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE = InnoDB;
mysql设置:
transaction_isolation = REPEATABLE-READ
autocommit = ON
事务指令:
BEGIN 开启事务
COMMIT 提交
ROLLBACK 回滚
1:事务基础
A B两个连接
A:
BEGIN;
insert into transaction_test(id, value) values (1, 1);B:
select * from transaction_test where id = 1;
-- 查不到未提交的修改A:
COMMIT;B:
select * from transaction_test where id = 1;
-- 能查到已提交的修改,mtime是执行insert时的时间
2:读操作,快照读
A:
insert into transaction_test(id, value) values (1, 1);B:
BEGIN;
select * from transaction_test where id = 1 or id = 2;
-- 查到id=1A:
insert into transaction_test(id, value) values (2, 2);B:
select * from transaction_test where id = 1 or id = 2;
--仍只查到id=1
--RR是读快照,第一次select时为整个库创建一致性快照,后续select都基于这个快照
--即创建快照后,其他事务的写操作(增、删、改)均对本次事务不可见
3:写操作,当前读,幻读
A:
BEGIN;
select * from transaction_test where id = 1;
--返回空B:
insert into transaction_test(id, value) values (1, 1);A:
select * from transaction_test where id = 1;
--返回空,为第一次select时的快照update transaction_test set value = 2 where id = 1;
--1 row affected ,写操作会取当前已commit的数据版本(即当前读,而非快照读),所以能修改 B insert 的数据select * from transaction_test where id = 1;
--查到id=1,自己事务的写操作对自己可见,所以此时能看到id=1这行数据
--上次查询读不到id=1的行,本次能读到,这一问题称为幻读
--注意:如果上述 update 改为 set value = 1,不改变数据的值,则后续仍然读不到
4:SELECT 后 INSERT 的竞态条件
A:
BEGIN;
select * from transaction_test where id = 1;
-- 返回空B:
insert into transaction_test(id, value) values (1, 1);A:
-- 检查select结果是否存在,如果不存在,执行插入
insert into transaction_test(id, value) values (1, 1);
-- Duplicate entry '1' for key 'PRIMARY' 插入失败
5:更新丢失
A:
BEGIN;
SELECT value FROM transaction_test WHERE id = 1; -- 读快照,得到100B:
BEGIN;
SELECT value FROM transaction_test WHERE id = 1; -- 读快照,仍为100A:
UPDATE transaction_test SET value = 100 + 10 WHERE id = 1; -- 写为110
COMMIT;B:
UPDATE transaction_test SET value = 100 + 20 WHERE id = 1; -- 写为120
COMMIT;
6:无丢失更新,排他锁
-- value初始为100
A:
UPDATE transaction_test SET value = value + 10 WHERE id = 1;
-- 写为110,UPDATE会加排他锁(X Lock),为行锁B:
UPDATE transaction_test SET value = value + 20 WHERE id = 1;
-- 此时A持有id=1的行锁,B等待A:
COMMIT;
-- 提交value=110的值B:
--A提交会释放锁,此时重新执行B的UPDATE,写操作为当前读,value由110更新为130
COMMIT;
-- 提交value=130的值
7:间隙锁,避免幻读
A:
BEGIN;
select * from transaction_test where id < 5 for update;
--执行 SELECT ... FOR UPDATE 或 UPDATE、DELETE 语句时,会为条件涉及的范围加间隙锁(Gap Lock)
--即使范围中没有实际数据,也会锁定间隙。B:
insert into transaction_test(id, value) values (1, 1);
--尝试在锁定范围(id=1)内写数据,会阻塞A:
-- 检查select结果是否存在,如果不存在,执行插入
insert into transaction_test(id, value) values (1, 1);
--插入成功
commitB:
--A commit 释放锁,此时重新执行B的插入,插入失败
8:死锁检测
InnoDB死锁检测默认开启,innodb_deadlock_detect=ON
A:
BEGIN;
update transaction_test set value = 1 where id = 1;
-- 持有id=1的行锁B:
BEGIN;
update transaction_test set value = 4 where id = 2;
-- 持有id=2的行锁A:
update transaction_test set value = 2 where id = 2;
-- 阻塞,等待事务B的锁
COMMIT;B:
update transaction_test set value = 3 where id = 1;
-- 阻塞,等待事务A的锁 -> 死锁
-- 当检测到死锁时,InnoDB 会主动回滚代价最小的事务,打破循环等待
-- 此时B回滚,A执行成功,回滚的事务会收到 ERROR 1213: Deadlock found
COMMIT;
其他事务规则:
- BEGIN 后再次执行 BEGIN:
当前活跃的事务会被隐式提交,并开启一个新事务 - BEGIN 后未提交事务就直接关闭客户端连接:
MySQL 会自动回滚该事务 - AUTO_INCREMENT:
自增ID的值一旦生成,即使事务回滚也不会回退
相关文章:
MySQL RR (Repeatable Read) 隔离级别规则细节
准备 测试表: CREATE TABLE transaction_test (id int,value int,mtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id) ) ENGINE InnoDB;mysql设置: transaction_isolation REPEATABLE-READ auto…...
iOS HTTPS 抓包踩坑记:几种方案尝试与替代工具记录
iOS HTTPS 抓包踩坑记:几种方案尝试与替代工具记录 最近负责一个 iOS App 的调试任务,遇到了 HTTPS 接口抓包难题,顺手做个记录,顺带分享一些试过的工具和方案。 背景 这个 App 启用了 HTTPS 双向认证和证书 pinning࿰…...
第十一节:Shell脚本编程
理论知识 Shell 脚本的基本概念:Shell 脚本是一种为 shell 编写的脚本程序,它可以将一系列的命令组合在一起,实现自动化任务。Shell 脚本通常以 .sh 为扩展名。Shell 脚本的执行方式:可以将 Shell 脚本作为可执行程序执行&#x…...
Electron Forge【实战】带图片的 AI 聊天
改用支持图片的 AI 模型 qwen-turbo 仅支持文字,要想体验图片聊天,需改用 qwen-vl-plus src/initData.ts {id: 2,name: "aliyun",title: "阿里 -- 通义千问",desc: "阿里百炼 -- 通义千问",// https://help.aliyun.com/z…...
Learning vtkjs之OutlineFilter
过滤器 外轮廓包围盒生成 介绍 vtkOutlineFilter - 一个为较大单元生成三角形的过滤器 vtkOutlineFilter 是一个将具有三个以上点的单元转换为三角形的过滤器。 感觉就是一个包围盒生成的算法,而且试用下来,只能支持一个InputConnection 效果 核心逻…...
腾讯云CodeBuddy初体验
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”; 最近AI编程很火,据说我司程序员现在每天可以准点下班,AI起到了很大的作…...
加速LLM大模型推理,KV缓存技术详解与PyTorch实现
随着大型语言模型(LLM)规模和复杂度的指数级增长,推理效率已成为人工智能领域亟待解决的关键挑战。当前,GPT-4、Claude 3和Llama 3等大模型虽然表现出强大的理解与生成能力,但其自回归解码过程中的计算冗余问题依然显著制约着实际应用场景中的…...
江西省电价新政发布!微电网源网荷储充一体化平台重塑企业能源格局!
一. 江西省发改委发布发布 4月25日,江西省发改委发布关于公开征求《关于进一步完善分时电价机制有关事项的通知(征求意见稿)》意见的公告。征求意见提出: 江西省:中午3小时谷段电价,电价下浮60%~70% 除1…...
深夜突发:OpenAI紧急修复GPT-4o“献媚”问题
凌晨三点,OpenAI首席执行官Sam Altman发布官方声明,宣布针对GPT-4o的“献媚”问题展开紧急修复。这场突如其来的技术风波,源于近期大量用户对模型行为模式的不满。许多用户发现,当他们向GPT-4o提出类似“你觉得我怎么样”或“如果…...
Webpack 和 Vite 中静态资源动态加载的实现原理与方法详解
静态资源动态加载 需求背景:现在需要加载指定文件夹下的对应图片,需要根据用户选的参数自动加载对应图片 一、前言:模块化开发的演进需求 在现代前端工程中,随着SPA应用复杂度的提升,静态资源动态加载已成为优化首屏性…...
SMMU相关知识
1. 使用smmu的作用 支持具有DMA能力设备的虚拟化实现解决32位系统访问超过4G空间的地址解决系统动态分配大块连续内存 2. 为什么需要使用2级页表 SMMU(系统内存管理单元)采用二级页表架构的核心原因可归结为地址空间管理效率、内存资源优化以及虚拟化…...
2025年数字创意设计与图像处理国际会议 (DCDIP 2025)
2025 International Conference on Digital Creative Design and Image Processing 【一】、大会信息 会议简称:DCDIP 2025 大会地点:中国济南 收录检索:提交Ei Compendex,CPCI,CNKI,Google Scholar等 【二…...
39.RocketMQ高性能核心原理与源码架构剖析
1. 源码环境搭建 1.1 主要功能模块 RocketMQ的官方Git仓库地址:GitHub - apache/rocketmq: Apache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications. RocketMQ的官方网站上下载指定版…...
SVTAV1 编码函数 svt_aom_is_pic_skipped
一 函数解释 1.1 svt_aom_is_pic_skipped函数的作用是判断当前图片是否可以跳过编码处理。 具体分析如下 函数逻辑 参数说明:函数接收一个指向图片父控制集的指针PictureParentControlSet *pcs, 通过这个指针可以获取与图片相关的各种信息,用于判断是否跳…...
C++负载均衡远程调用学习之基础TCP服务
目录 1.LARS课程模块介绍 2.LARS的功能演示机场景作用 3.LARS的reactor框架的组成部分 4.Lars_reactor的项目目录构建 5.Lars_tcp_server的基础服务开发 6.Lars_tcp_server的accept实现 7.LarsV0.1总结 1.LARS课程模块介绍 2.LARS的功能演示机场景作用 # Lars系统开发 …...
WebRtc09:网络基础P2P/STUN/TURN/ICE
网络传输基本知识 NATSTUN(Session Traversal Utilities for NAT)TURNICE NAT 产生的原因 IPV4地址不够出于网络安全的原因 NAT种类 完全锥型NAT(Full Cone NAT)地址限制型NAT(Address Restricted Cone NAT)端口限制型NAT(Port Restricted Cone NAT…...
UDP/TCP协议知识及相关机制
一.UDP协议 UDP是一种无连接、不可靠、面向报文、全双工传输层的协议~ 1.无连接 : 知道对端的端口号和IP可以直接传输,不需要建立连接 2..不可靠:没有确认机制,没有重传机制,不知道数据包能否能正确到达对端࿰…...
windows 下 oracle 数据库的备份与还原
1、备份 创建备份出来的文件存放的位置。 创建目录对象,在数据库中创建一个目录对象,该对象指向文件系统中用于存储导出文件的实际目录( sql 命令,可以在 plsql 中执行)。 -- 创建目录对象,\D:\Oracle19c\…...
LeetCode41☞缺失的第一个正数
关联LeetCode题号41 本题特点 数组,哈希表 本题思路 找缺失的最小正数,看举例说明缺失的正数,一种情况是连续的最小的正数,一种是缺失连续但不是最小的正数验证数组内数组是否连续,可以通过 nums[i]1 是否存nums组…...
毕业论文 | 基于STM32的自动烟雾报警系统设计
基于STM32的烟雾报警系统 一、系统设计原理1. **系统架构**2. **工作原理**二、核心公式与算法1. **MQ-2传感器浓度计算**2. **温度传感器数据处理**3. **校准与滤波**三、关键代码实现1. **ADC初始化与数据读取(以MQ-2为例)**2. **报警逻辑与阈值设置**3. **EEPROM存储阈值*…...
iOS 性能调优实战:三款工具横向对比实测(含 Instruments、KeyMob、Xlog)
iOS 性能调优实战:三款工具横向对比实测(含 Instruments、KeyMob、Xlog) 在日常 iOS 开发中,性能问题往往是最难排查、最影响体验的部分。无论是 CPU 峰值、内存飙升,还是偶发卡顿、异常崩溃,背后都隐藏着…...
flutter 专题 五十八 关于Flutter提示Your Xcode project requires migration的错误
最近,升级了Flutter后,运行之前的项目报了一个如下的错误: Your Xcode project requires migration. See https://flutter.dev/docs/development/ios-project-migration for details. Error launching application on iPhone 11 Pro.想到之前…...
【c++】【STL】list详解
目录 list的作用list的接口构造函数赋值运算符重载迭代器相关sizeemptyfrontbackassignpush_frontpop_frontpush_backpop_backinserteraseswapresizeclearspliceremoveremove_ifuniquemergesortreverse关系运算符重载(非成员函数) list的模拟实现结点类迭…...
redis 数据类型新手练习系列——List类型
redis 数据类型 Redis 主要支持以下几种数据类型: (1)string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。 (2)hash(哈希):一个键值对集…...
文章记单词 | 第52篇(六级)
一,单词释义 grasp:英 [ɡrɑːsp] 美 [ɡrsp],v. 抓住;紧握;理解;领会;n. 紧握;控制;理解glue:英 [ɡluː] 美 [ɡluː],n. 胶水;胶…...
【今日三题】kotori和气球(排列) / 走迷宫(BFS最短路) / 主持人调度(二)(贪心+优先级队列)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 kotori和气球(排列)走迷宫(BFS最短路)主持人调度(二)(贪心优先级队列) kotori和气球(排列) kotori和…...
Mysql数据库高可用解决方案-Mysql Router
目录 一.MySQL Router介绍 1. 什么是 MySQL Router? 2. MySQL Router 的主要用途 3. MySQL Router 的工作原理 4. MySQL Router 的核心组件 5. MySQL Router 的部署和配置 6. MySQL Router 的优势 7. 注意事项 8. MySQL Router 与其他工具的对比 9. 总结 …...
windows系统 压力测试技术
一、CPU压测模拟 工具:CpuStres v2.0 官网:https://learn.microsoft.com/en-us/sysinternals/downloads/cpustres 功能:是一个工具类,用来模拟在一个进程中启动最多64个线程,且可以独立控制任何一个线程的启动/暂停、…...
汽车免拆诊断案例 | 2015款奔驰C200L车发动机起动延迟
故障现象 一辆2015款奔驰C200L车,搭载274发动机,累计行驶里程约为15.6万km。该车发动机起动延迟,且发动机故障灯异常点亮。 故障诊断 用故障检测仪检测,发动机控制单元中存储有故障代码“P001685 进气凸轮轴(气缸…...
Python AI图像艺术创作:核心技术与实践指南
Python与AI技术的结合为图像艺术创作开辟了全新维度,通过生成对抗网络(GANs)、扩散模型(如Stable Diffusion)和神经风格迁移等技术,创作者可以轻松生成具有高度创意和艺术性的图像作品。 这些技术不仅突破了传统艺术创作的局限性,还大幅降低了专业创作门槛,使艺术创作…...
比亚迪再获国际双奖 以“技术为王”书写中国汽车出海新篇章
近日,全球汽车行业权威奖项“2025世界汽车大奖”(World Car Awards)在纽约国际车展举行颁奖典礼,比亚迪海鸥(BYD SEAGULL/BYD DOLPHIN MINI)摘得“2025世界城市车(World Urban Car)”…...
虚幻商城 Quixel 免费资产自动化入库(2025年版)
文章目录 一、背景二、问题讲解1. Quixel 免费资产是否还能一键入库?2. 是不是使用了一键入库功能 Quixel 的所有资产就能入库了?3. 一键入库会入库哪些资产?三、实现效果展示四、实现自动化入库五、常见问题1. 出现401报错2. 出现429报错3. 入库过于缓慢4. 入库 0 个资产一…...
斯坦福RGA软件 老版本和兼容Windows 11版本可选
斯坦福RGA软件 老版本和兼容Windows 11版本可选...
RHCSA Linux 系统 文件系统权限
1. 文件的一般权限 (1)文件权限标识解读 drwxr - xr - x. 12 root root 144 Feb 17 16:51 usr ➤d:文件类型(d 表示目录) ➤rwx:文件所有者权限(读 r,写 w,执行 x&am…...
【补题】Codeforces Global Round 20 D. Cyclic Rotation
题意:偷懒 思路: D. Cyclic Rotation - Yaqu - 博客园 1.有个观察,如果操作过的序列,一定是连续相同的数字,当然这不代表一定操作过了,由于操作过1次后连续就没有意义,可以假设全都操作…...
2025年“深圳杯”数学建模挑战赛C题-分布式能源接入配电网的风险分析
布式能源接入配电网的风险分析 小驴数模 背景知识: 随着我国双碳目标的推进,可再生分布式能源在配电网中的大规模应用不可避免,这对传统配电网运行提出挑战。为了量化分析配电网中接入分布式能源的风险,需要对其进行建模与分析…...
微调 LLaMA 2:定制大型语言模型的分步指南
微调 LLaMA 2:定制大型语言模型的分步指南 深入了解如何运用新技术在 Google Colab 平台上对 Llama-2 进行微调操作,从而有效克服内存与计算方面的限制,让开源大型语言模型变得更加易于获取和使用。自从 Meta 发布了 LLaMA 的首个版本后&…...
react-11使用vscode开发react相关扩展插件(相关的快捷生成)
1.快速搭建react组件模板 2.相关搭建命令 2.1 导入导出 前缀方法imp→import moduleName from moduleimn→import moduleimd→import { destructuredModule } from moduleime→import * as alias from moduleima→import { originalName as aliasName} from moduleexp→expo…...
人工智能数学基础(六):数理统计
数理统计是人工智能中数据处理和分析的核心工具,它通过收集、分析数据来推断总体特征和规律。本文将系统介绍数理统计的基本概念和方法,并结合 Python 实例,帮助读者更好地理解和应用这些知识。资源绑定附上完整资源供读者参考学习࿰…...
组网技术知识点
1.port-isloate enable命令用于实现两个接口之间的二层数据隔离,三层数据互通。 2.交换机最多支持4096个VLAN,编号为1-4094 3.display bfd session all:查看BFD会话状态是否UP 4.RJ45通过双绞线连接以太网; AUI端口࿱…...
常用电机类型及其特点对比
1. 直流电机 直流电机里边固定有环状永磁体,电流通过转子上的线圈产生安培力,当转子上的线圈与磁场平行时,再继续转受到的磁场方向将改变,因此此时转子末端的电刷跟转换片交替接触,从而线圈上的电流方向也改变&#x…...
SVTAV1源码-set_all_ref_frame_type
set_all_ref_frame_type函数的主要作用是为当前图像设置所有可能用到的参考帧类型,并将这些参考帧类型存储到一个数组中,同时记录总共有多少个参考帧类型,以下是该函数的各部分解释: 初始化和准备 MvReferenceFrame rf[2]; *tot_r…...
Can‘t create thread to handle bootstrap
MySQL在docker里面启动失败 关键性报错Cant create thread to handle bootstrap rootubuntu:/data# docker logs 6835ec900d8c 2025-04-30 23:29:4308:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.42-1.el9 started. 2025-04-30 23:29:4308:00 [Note] […...
用Power shell脚本批量发布rdl文件到SQL Server Reporting Service
本文用于介绍如何用Power shell脚本批量发布rdl文件到SQL Server Reporting Service. 用户可根据自己的需要创建类似Publish_All_SSRS.ps1的脚本。 目录 1. 目录结构 2. 创建Base_PublishSSRS.ps1 3. 创建Publish_All_SSRS.ps1 4.注意事项 1. 目录结构 目录结构ÿ…...
2025-03 机器人等级考试四级理论真题 4级
1 2025年蛇年春晚,节目《秧BOT》机器人舞蹈表演节目点燃了全国观众的热情,请问参加节目表演的机器人是由哪家公司研发?( ) A.大疆 B.华为 C.优必选 D.宇树科技 【参考答…...
12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档)
12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档) SpringDoc OpenAPI 是一个基于 OpenAPI 3.0/3.1 规范的工具,用于为 Spring Boot 应用生成 API 文档。它是 springfox(Swagger 2.x)的现代替代方案,完全支持 Spring Boot 3.x…...
Java 实用时间工具类:DateUtils 与 DurationFormatUtils
前言 在 Java 项目中,处理日期时间相关的操作极为常见。Apache Commons Lang 提供了两个非常实用的时间工具类:DateUtils 和 DurationFormatUtils,它们分别负责简化日期处理和格式化时间间隔,帮助开发者更高效地进行时间操作。 一…...
Unity3D仿星露谷物语开发40之割草动画
1、目标 当Player选择Scythe后,鼠标悬浮在草上,会显示绿色光标。鼠标左击,会触发割草的动画。 2、优化Settings.cs脚本 添加以下两行代码: // Reaping(收割) public const int maxCollidersToTestPerRe…...
量化交易之数学与统计学基础2.4——线性代数与矩阵运算 | 矩阵分解
量化交易之数学与统计学基础2.4——线性代数与矩阵运算 | 矩阵分解 第二部分:线性代数与矩阵运算 第4节:矩阵分解:奇异值分解(SVD)在数据压缩和风险分解的应用 一、奇异值分解(SVD)基础…...
ES使用之查询方式
文章目录 ES中的数据查询返回字段含义track_total_hits 精准匹配(term)单值匹配多值匹配 全文检索(match)range查询高级查询布尔查询 ES中的数据查询 返回字段含义 track_total_hits track_total_hits是 Elasticsearch 中用于 控制匹配文档总数统计行为 的关键参数。就算…...