深入解析MySQL事务隔离级别与锁机制在银行账户业务中的应用
一、引言
在金融行业,尤其是银行账户业务中,数据的一致性和安全性至关重要。MySQL作为一种广泛使用的数据库,其事务隔离级别和锁机制在保证数据一致性方面发挥着重要作用。本文将针对银行账户查询与转账业务,探讨如何运用事务锁来确保业务顺利进行。
二、MySQL事务隔离级别与锁机制概述
- 事务隔离级别
MySQL提供了以下四种事务隔离级别:
(1)读未提交(READ UNCOMMITTED) (2)读已提交(READ COMMITTED) (3)可重复读(REPEATABLE READ) (4)串行化(SERIALIZABLE)
不同的事务隔离级别会导致不同的锁行为,从而影响数据库的并发性能和数据一致性。
- 锁机制
MySQL中的锁分为以下几种:
(1)共享锁(Shared Lock):允许事务读取数据,但不允许修改。 (2)排他锁(Exclusive Lock):允许事务读取和修改数据,但不允许其他事务进行读取或修改。 (3)意向锁(Intention Lock):用于锁定更高层次的资源,以表明事务的意图。
三、银行账户查询与转账业务中的锁使用详解
(一)查询业务中的锁使用
在查询业务中,我们主要使用的是共享锁(Shared Lock)。
- 共享锁(Shared Lock)使用说明
共享锁是一种读取锁,它允许事务读取一条记录,同时阻止其他事务对该记录进行修改。在MySQL中,可以通过以下方式使用共享锁:
- 使用
LOCK IN SHARE MODE
子句在SELECT
语句中显式添加共享锁。 - 当事务隔离级别为“可重复读”时,普通的
SELECT
语句也会在读取的记录上设置共享锁,但这取决于MySQL的存储引擎(如InnoDB)。
示例代码:
-- 设置事务隔离级别为“可重复读”
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;-- 开始事务
START TRANSACTION;-- 查询账户余额,并为记录添加共享锁
SELECT balance FROM account WHERE account_id = 1 LOCK IN SHARE MODE;-- 提交事务
COMMIT;
使用共享锁可以防止在查询过程中,其他事务对查询的记录进行修改,从而避免脏读。
(二)转账业务中的锁使用
在转账业务中,我们主要使用的是排他锁(Exclusive Lock)。
- 排他锁(Exclusive Lock)使用说明
排他锁是一种写入锁,它允许事务读取和修改一条记录,并阻止其他事务对该记录进行读取或修改。在MySQL中,以下操作会自动为记录添加排他锁:
INSERT
、UPDATE
和DELETE
语句在执行时,会自动为涉及的记录添加排他锁。- 当事务隔离级别为“可重复读”或“串行化”时,
SELECT
语句在某些情况下也会使用排他锁。
示例代码:
-- 设置事务隔离级别为“可重复读”
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;-- 开始事务
START TRANSACTION;-- 从账户1扣款,并为记录添加排他锁
UPDATE account SET balance = balance - 1000 WHERE account_id = 1;-- 向账户2存款,并为记录添加排他锁
UPDATE account SET balance = balance + 1000 WHERE account_id = 2;-- 提交事务
COMMIT;
使用排他锁可以确保在转账过程中,其他事务无法读取或修改正在操作的账户记录,从而避免幻读和不可重复读。
(三)意向锁(Intention Lock)使用说明
意向锁是一种表级锁,它表明事务将要执行的操作类型。意向锁分为意向共享锁(Intention Shared Lock)和意向排他锁(Intention Exclusive Lock)。在执行SELECT
、INSERT
、UPDATE
或DELETE
操作时,InnoDB存储引擎会自动添加意向锁。
- 意向共享锁:表明事务打算在表中的某些行上设置共享锁。
- 意向排他锁:表明事务打算在表中的某些行上设置排他锁。
意向锁的使用是为了提高性能,使得存储引擎在处理表级锁请求时,能够快速判断表中的行是否被锁定。
四、总结
通过上述锁的使用说明,我们可以更好地理解在银行账户查询与转账业务中,如何通过设置合适的事务隔离级别和运用各种锁来保证数据的一致性和安全性。在实际项目中,应根据业务需求和并发情况,合理选择和运用锁,以实现高效、稳定的数据库操作。
相关文章:
深入解析MySQL事务隔离级别与锁机制在银行账户业务中的应用
一、引言 在金融行业,尤其是银行账户业务中,数据的一致性和安全性至关重要。MySQL作为一种广泛使用的数据库,其事务隔离级别和锁机制在保证数据一致性方面发挥着重要作用。本文将针对银行账户查询与转账业务,探讨如何运用事务锁来…...
Linux 设备树
学习设备树之前你需要知道什么? 因为设备树描述了整个芯片和开发板等所有硬件信息内容,所以他的信息量是非常庞大的,RK的linux的设备树算下来大概就有九千多行,大家不要被这个数字给吓到,这些内容都是原厂工程师写的&a…...
Ollama管理本地开源大模型,用Open WebUI访问Ollama接口
现在开源大模型一个接一个的,而且各个都说自己的性能非常厉害,但是对于我们这些使用者,用起来就比较尴尬了。因为一个模型一个调用的方式,先得下载模型,下完模型,写加载代码,麻烦得很。 对于程序的规范来说,只要东西一多,我们就需要一个集中管理的平台,如管理python…...
面向对象进阶:多态
黑马程序员Java个人笔记 BV17F411T7Ao p129~132 目录 多态 多态调用成员的特点 调用成员变量 调用成员方法 理解 多态的优势 解耦合 多态的弊端 解决方案:强制类型转换 instanceof jdk14新特性,将判断和强转放一起 总结 多态 多态调…...
设置IMX6ULL开发板的网卡IP的两种方法(临时生效和永久有效两种方法)
设置开发板网卡的IP,有两种方法。 方法一:临时生效 第一种方式是临时设置,只有本次有效,重启后又要重新设,命令为: ifconfig eth0 192.168.5.9设置成功后可以使用ifconfig命令来查看已设置的 IP 地址。 …...
Navicat for MySQL 查主键、表字段类型、索引
针对Navicat 版本11 ,不同版本查询方式可能不同 1、主键查询 (重点找DDL!!!) 方法(1) :右键 - 对象信息 - 选择要查的表 - DDL - PRIMARY KEY 方法(2&…...
二十七、Tomcat专题总结与拓展
文章目录 一、Tomcat设计思路总结1、Tomcat整体架构2、Tomcat设计思路 二、Tomcat源码设计精髓三、拓展:SpringBoot整合Tomcat源码分析四、拓展:SpringBoot整合Undertow实战1、Undertow概述2、SpringBoot集成Undertow2.1、引入依赖2.2、application.prop…...
WPF+MVVM案例实战与特效(三十九)- 深度剖析一个弧形进度条的实现
文章目录 1、使用 Path 结合 ArcSegment 绘制圆弧1、属性解读2、静态圆弧3、动态圆弧4、运行效果5、圆弧两端点的形状2、总结1、使用 Path 结合 ArcSegment 绘制圆弧 1、属性解读 Path 是 WPF 中的一个标记元素,用于绘制复杂的几何路径形状,而 ArcSegment 用于描述 Path 中…...
Spring Boot 应用 “Connection is closed” 及 MySQL 空闲超时断开连接解决方案
在使用 Spring Boot MySQL HikariCP 的组合时,可能会在生产或测试环境中遭遇类似如下异常信息: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT ...]; SQL state [nu…...
【数据库】Oracle
文章目录 1. 批量更新 1. 批量更新 这种方式将所有更新操作放在一个事务中执行,减少了与数据库的交互次数,从而可能提高性能。此外,事务处理还可以确保数据的一致性和完整性。begin; update mytable set STATE 102,STATE_DATE now() …...
链式栈的实现及其应用
目录 一、链式栈结构模型 二、链式栈的实现 2.1创建 2.2压栈 2.3出栈 2.4判断栈是否为空 2.5查看栈顶 2.6释放栈 三、应用 链式栈实际上就是基于链表,压栈和弹栈可分别看作头插和头删,链表尾部就是栈底,头指针就是栈顶指针 一、链式…...
结构化的Prompt
资源库: AI 提示词-WayToAGI精选高效的AI提示词库,助力创作者和开发者解锁人工智能的潜力。通过我们的提示词和策略,优化您的AI工具使用效率,激发创意思维,提升产出质量。https://www.waytoagi.com/prompts?tag6 结构…...
ChatGPT突然全球宕机,OpenAI致歉:并查明原因,正积极修复
ChatGPT突然全球宕机,OpenAI致歉:并查明原因,正积极修复 在 2024 年 12 月 12 日上午的北京时间时段内,ChatGPT突发全球宕机,OpenAI致歉:已查明原因,正积极修复 官方证实了其备受瞩目的聊天机器…...
【实验16】基于双向LSTM模型完成文本分类任务
目录 1 数据集处理- IMDB 电影评论数据集 1.1 认识数据集 1.2 数据加载 1.3 构造Dataset类 1.4 封装DataLoader 1.4.1 collate_fn函数 1.4.2 封装dataloader 2 模型构建 2.1 汇聚层算子 2.2 模型汇总 3 模型训练 4 模型评价 5 模型预测 6 完整代码 7 拓展实验 …...
【中工开发者】鸿蒙商城app
这学期我学习了鸿蒙,想用鸿蒙做一个鸿蒙商城app,来展示一下。 项目环境搭建: 1.开发环境:DevEco Studio2.开发语言:ArkTS3.运行环境:Harmony NEXT base1 软件要求: DevEco Studio 5.0.0 Rel…...
SpringBoot 整合 MongoDB 实现文档存储
一、MongoDB 简介 MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解…...
鲲鹏麒麟安装ElasticSearch7.8.0
因项目需求需要在鲲鹏麒麟服务器上安装ElasticSearch7.8.0,考虑Docker方式安装比较简单,因此使用Docker方式安装 环境信息 操作系统:Kylin Linux Advanced Server release V10 (Tercel) Docker:18.09.0 [rootserver ~]# uname …...
NDN命名数据网络和域名的区别
NDN(Named Data Networking)网络的概念 NDN是一种新型的网络架构,也被称为命名数据网络。与传统的以IP地址为中心的网络架构不同,NDN是以数据(内容)本身命名为中心的网络架构。在传统网络中,我们通过IP地址来寻找主机设备,然后获取该设备上存储的内容。而在NDN网络中,…...
PyTorch基本使用-自动微分模块
学习目的:掌握自动微分模块的使用 训练神经网络时,最常用的算法就是反向传播。在该算法中,参数(模型权重)会根据损失函数关于对应参数的梯度进行调整。为了计算这些梯度,PyTorch 内置了名为 torch.autogra…...
关于linux kernel softlockup 的探究
1. 基本解释 softlockup:发生在某个 CPU 长时间占用资源,但 CPU 仍然可以响应中断 和调度器。软死锁通常不会导致系统崩溃,但可能会使系统响应变慢. 2. 驱动模拟softlockup 以下为代码实现 #include <linux/module.h> #include <…...
MySQL 时区参数 time_zone 详解
文章目录 前言1. 时区参数影响2. 如何设置3. 字段类型选择 前言 MySQL 时区参数 time_zone 有什么用?修改它有什么影响?如何设置该参数,本篇文章会详细介绍。 1. 时区参数影响 time_zone 参数影响着 MySQL 系统函数还有字段的 DEFAULT CUR…...
【计算机网络层】数据链路层 :局域网和交换机
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯局域网 🚦局域网…...
WebSocket、Socket、TCP 与 HTTP:深入探讨与对比
随着互联网技术的快速发展,现代Web应用对于实时通信的需求越来越高。传统的HTTP协议由于其无状态和请求-响应模式的限制,在实现高效、低延迟的实时通信方面存在一定的局限性。为了解决这一问题,WebSocket协议应运而生,它提供了一种…...
【开源免费】基于SpringBoot+Vue.JS在线办公系统(JAVA毕业设计)
本文项目编号 T 001 ,文末自助获取源码 \color{red}{T001,文末自助获取源码} T001,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
Vue指令
创建项目: vue init webpack 项目名称 element-ui npm i element-ui -saxios npm i axios1.1.3 -S vuex npm i vuex3.6.2 -S vuex持久化 npm i -S vuex-persistedstate4.1.0代理模版 proxyTable: {/api: {target: http://localhost:8081/,changeOrigin: true,pathRe…...
经典文献阅读之--ATI-CTLO(基于自适应时间间隔的连续时间Lidar-Only里程计)
0. 简介 激光雷达扫描中的运动失真,由机器人的激烈运动和环境地形特征引起,显著影响了3D激光雷达里程计的定位和制图性能。现有的失真校正解决方案在计算复杂性和准确性之间难以平衡。《ATI-CTLO: Adaptive Temporal Interval-based Continuous-Time Li…...
【GitHub分享】you-get项目
【GitHub分享】you-get 一、介绍二、安装教程三、使用教程四、配置ffmpeg五,卸载 如果大家想要更具体地操作可去开源网站查看手册,这里只是一些简单介绍,但是也够用一般,有什么问题,也可以留言。 一、介绍 you-get是一…...
右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统
一、项目名称 山西右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统 二、项目背景: 山西右玉光伏发电项目位于右玉县境内,总装机容量为200MW,即太阳能电池阵列共由200个1MW多晶硅电池阵列子方阵组成,每个子方阵包含太阳能…...
box 提取
box 提取 import json import os import shutilimport cv2 import numpy as np import pypinyinclass Aaa():passdef pinyin(word):s for i in pypinyin.pinyin(word, stylepypinyin.NORMAL):s .join(i)return s if __name__ __main__:selfAaa()base_dirrE:\data\dao\20241…...
【合作原创】使用Termux搭建可以使用的生产力环境(六)
前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(五)-CSDN博客我们讲到了如何美化xfce4桌面,达到类似于Windows的效果,这一篇将继续在上一篇桌面的基础上给我们的系统装上必要的软件,让它做到真正可以使…...
C#—索引器
C#—索引器 索引器(Indexer)是类中的一个特殊成员,它能够让对象以类似数组的形式来操作,使程序看起来更为直观,更容易编写。索引器与属性类似,在定义索引器时同样会用到 get 和 set 访问器,不同…...
Microsemi Libero SoC免费许可证申请指南(Microchip官网2024最新方法)
点击如下链接: https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/licensing 点击右侧,请求免费的License 如果提示登录,请先登录Microchip账号。 点击Request Free License。 选项一年免费的Li…...
【CSS in Depth 2 精译_074】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(下):行内元素的间距设置
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 ✔️ 12.2 Web 字体12.3 谷歌字体 文章目…...
React 18
文章目录 React 18自动批处理并发特性Suspense 组件增强新 HookscreateRoot API 替代 ReactDOM.renderStrict Mode严格模式服务器端渲染改进性能优化 React 18 React 18 引入了一系列新特性和改进,旨在提升性能、改善用户体验,并简化开发流程。以下是 R…...
yolov,coco,voc标记的睡岗检测数据集,可识别在桌子上趴着睡,埋头睡觉,座椅上靠着睡,平躺着睡等多种睡姿的检测,6549张图片
yolov,coco,voc标记的睡岗检测数据集,可识别在桌子上趴着睡,埋头睡觉,座椅上靠着睡,平躺着睡等多种睡姿的检测,6549张图片 数据集分割 6549总图像数 训练组91% 5949图片 有效集9&#x…...
Pydantic中的discriminator:优雅地处理联合类型详解
Pydantic中的discriminator:优雅地处理联合类型详解 引言1. 什么是discriminator?2. 基本使用示例3. discriminator的工作原理4. 更复杂的实际应用场景5. 使用建议6. 潜在陷阱和注意事项结论最佳实践 引言 在Python的类型系统中,有时我们需要…...
vue实现文件流形式的导出下载
文章目录 Vue 项目中下载返回的文件流操作步骤一、使用 Axios 请求文件流数据二、设置响应类型为 ‘blob’三、创建下载链接并触发下载四、在 Vue 组件中集成下载功能五、解释与实例说明1、使用 Axios 请求文件流数据:设置响应类型为 blob:创建下载链接并…...
Dify工具前奏:一个好玩的镜像,selenium
文章目录 按照惯例,闲聊开篇通义千问给出的回答,蛮有趣的。什么是selenium?使用场景缺点按照惯例,闲聊开篇 眼看就要过0点了,今天写点有把握的。 我先卖个关子,问你们一个问题: 我用mobaxterm或者其它的工具,ssh访问到远程服务器。但我想在那台机器上打开浏览器该怎么…...
警惕!手动调整服务器时间可能引发的系统灾难
警惕!手动调整服务器时间可能引发的系统灾难 1. 鉴权机制1.1 基于时间戳的签名验证1.2 基于会话的认证机制(JWT、TOTP) 2. 雪花算法生成 ID 的影响2.1 时间戳回拨导致 ID 冲突2.2 ID 顺序被打乱 3. 日志记录与审计3.1 日志顺序错误3.2 审计日…...
Python泛型编程:TypeVar和Generic详解 - 写给初学者的指南
Python泛型编程:TypeVar和Generic详解 - 写给初学者的指南 前言1. 为什么需要泛型?2. TypeVar:定义泛型类型变量3. Generic:创建泛型类4. 多个泛型类型变量5. 使用场景小结结语 前言 大家好!今天我们来聊一聊Python中…...
单片机:实现控制LED灯亮灭(附带源码)
使用单片机控制LED灯的亮灭是一个非常基础的嵌入式应用项目,适合初学者学习如何操作GPIO(通用输入输出)端口以及如何控制外设。通过该项目,您可以学习如何通过按键输入、定时器控制或其他触发条件来控制LED灯的开关状态。 1. 项目…...
Dcoker安装nginx,完成反向代理和负载均衡
1. 简介 官网:nginx Nginx是一个高性能的 HTTP 和反向代理 Web 服务器。它的主要功能包括反向代理、负载均衡和动静分离等。正因为 Nginx的这些功能能够为系统带来性能和安全方面的诸多优势,我们在项目部署时需要引入 Nginx组件。接下来我们会逐一向大…...
Java转C之C/C++ 的宏定义和预处理
C/C 宏定义和预处理总结 C/C 的宏定义和预处理器是在编译前执行的一系列文本处理操作,用于包含文件、定义常量、条件编译和控制编译器行为。以下是全面总结,涵盖各种知识点、注意事项以及示例。 表1:C/C 预处理指令和功能 预处理指令功能描…...
【老白学 Java】数字格式化
数字格式化 文章来源:《Head First Java》修炼感悟。 很多时候需要对数字或日期进行格式化操作,来达到某些输出效果。Java 的 Formatter 类提供了很多扩展性功能用于字符串的格式化,只要调用 String 静态方法 format() ,传入参数…...
elementUI修改table样式
在Vue项目中,如果使用的是单文件组件(.vue),并且样式是通过<style>标签定义的,vue2可以使用/deep/,vue3可以使用::v-deep选择器来修改ElementUI组件的样式。 1.修改表头背景色 /deep/.el-table__head…...
Invalid bound statement (not found) 错误解决
出现这个错误提示:Invalid bound statement (not found): com.xxx.small_reservior.dao.WaterRainMapper.getWaterRainByRegion,通常表示 MyBatis 框架无法找到与给定的 getWaterRainByRegion 方法匹配的 SQL 映射语句。这种问题通常发生在以下几种情况中…...
AWD学习(二)
学习参考: AWD攻防学习总结(草稿状态,待陆续补充)_awd攻防赛入门-CSDN博客国赛分区赛awd赛后总结-安心做awd混子-安全客 - 安全资讯平台 记第一次 AWD 赛前准备与赛后小结-腾讯云开发者社区-腾讯云 AWD学习笔记 - DiaosSamas Blog…...
VUE常见问题汇总
目录 1、80端口占用问题 2、sass版本安装问题 3、Missing binding node_modules/node-sass/vendor/darwin-x64-72/binding.node 4、Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/win32-x64-83_binding.node Cannot download &qu…...
H.323音视频协议
概述 H.323是国际电信联盟(ITU)的一个标准协议栈,该协议栈是一个有机的整体,根据功能可以将其分为四类协议,也就是说该协议从系统的总体框架(H.323)、视频编解码(H.263)、…...
第六届地博会开幕,世界酒中国菜美食文化节同期启幕推动地标发展
第六届知交会暨地博会开幕,辽黔欧三地馆亮点纷呈,世界酒中国菜助力地理标志产品发展 第六届知交会暨地博会盛大开幕,多地展馆亮点频出,美食文化节同期启幕推动地标产业发展 12月9日,第六届粤港澳大湾区知识产权交易博…...