Spring_事务

news2025/5/22 12:24:18

事务的主要内容

  1. 事务定义
    特性:ACID
    并发时产生的问题
    事务的隔离级别

    事务的传播特性
    异常处理
    超时
    只读事务
    TransactionDefinition

  2. 并发时产生的问题
    一个数据库可以允许多个客户端同时访问,即并发的方式访问数据库。数据库中的同一个数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并发问题,从而破坏数据的完整性。这些问题可以归为5类,包括3类数据读问题(脏读,不可得复读和幻象读)及两类数据更新问题(第一类丢失更新和第二类丢失更新)。
    脏读
    不可重复读
    幻读
    丢失更新(1,2)

脏读

A事务读取了B事务尚未提交的更改数据,并且在这个数据基础上进行操作。如果此时恰巧B事务进行回滚,那么A事务读到的数据是根本不被承认的。以下是一个取款事务和转账事务并发时引起的脏读场景。
在这里插入图片描述
在这个场景中,B希望取款500元,而后有撤销了动作,而A往同一个账户转账100元,因为A事务读取了B事务尚未提交的数据,因而导致了账户白白丢失了500元。在Oracle数据中,不会发生脏读的情况。

不可重复读

  1. 在一个事务中,两次读取到的同一个记录的数据不一致;
  2. 不可重复读是指A事务读取了B事务已经提交的更改数据。假设A在取款事务的过程中,B往该账户转账100元,A两次读取账户的余额发生不一致;
  3. 在同一个事务中T4和T7时间点读取的账户存款余额不一致;

幻读

在一个事务中,两次读取到的统计数据不一致;
A事务读取B提交的新增数据,这时A事务将出现幻想读的问题。幻读一般发生在计算统计数据的事务中。举个例子,假设银行系统在同一个事务中两次统计存款的总金额,在两次统计过程中,刚好新增了一个存款账户,并存入100元,这时两次统计的总金额将不一致。
在这里插入图片描述
如果新增的数据刚好满足事务的查询条件,那么这个新数据就会进入事务的视野,因而导致两次统计结果不一致的情况。 幻读和不可重复读是两个容易混淆的概念,前者是指读到了其他事物已经提交的新增数据,而后者是读到了已经提交事务的更改数据(更改或删除)。为了避免这两种情况,采取的策略是不同的:防止读到更改数据,只需对操作的数据添加行级锁,阻止操作过程中的数据发送变化,而防止读到新增数据,则往往需要添加一个表级锁–将整张表锁定,防止新增数据(Oracle使用多版本数据的方式实现)

丢失更新1

A事务撤销时,将B事务提交的数据覆盖掉;
A事务撤销时,把已经提交的B事务的更新数据覆盖了。这种错可能会造成很严重的问题。通过下面的账号取款转账就可以看出来。
在这里插入图片描述
A事务在撤销时,“不小心”将B事务已经转入账号的金额给抹去了。

丢失更新2

A事务提交时,将B事务提交的数据覆盖掉;
A事务覆盖B事务已经提交的数据,造成B事务所操作丢失。
在这里插入图片描述
在上面的例子,由于支票转账事务覆盖了取款事务对存款余额所做的更新,导致银行最后损失了100元,相反如果转账事务先提交,那么用户损失了100元。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年12306购票平台自动化购票终|解决乘客选择与车票提交(附自动化购票完整源代码与演示视频)

目录 一、说明 1.1、背景 1.2、说明 二、步骤 2.1、切换视角检索乘车乘客 2.2、选择乘客 2.3、关闭学生票选择界面 2.4、提交订单 2.5、选择座位并确认 三、完整代码与视频演示 3.1、完整源代码如下 3.2、视频演示代码运行 四、结果 4.1、代码运行结果 五、总结…

windows获取iOS设备信息

依赖环境: 1.python3.6以上版本, 2.配置python的系统环境变量。 3.python已经安装pip。 安装tidevice: 1.打开cmd,输入命令pip3 install -U "tidevice[openssl]"如图所示,安装成功。 2.查看tidevice版本号&#xff0c…

网络超火的音效素材、BGM,全在这里了。

推荐几个超好用的音效素材网站,全网火爆的音效、BGM这里都能找到,自媒体、视频剪辑小伙伴必备!建议收藏! 1、菜鸟图库 https://www.sucai999.com/audio.html?vNTYwNDUx 菜鸟图库是一个综合性素材网站,站内涵盖设计、…

vector模拟实现之迭代器失效及深浅拷贝的问题

vector模拟实现 Tips:new申请空间不用判断,因为失败的话会抛异常。 STL源代码中vector的私有成员变量如下: private:iterator _start;//首元素iterator _finish;//最后一个有效数据的下一个,-_start为sizeiterator _endofstora…

6-3分布散度的9个梯度

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有1个节点,AB各由9张二值化的图片组成,排列组合A和B的所有可能性,固定收敛误差为7e-4,统计收敛迭代次数,并比较迭代次数的变化规律。 差值结构 A-B 迭代次数 …

Huawei Matebook X Pro 2018 Space Gray电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板Huawei Matebook X Pro 2018 Space Gray处理器Intel Core i7-8550U已驱动内存16 GB LPDDR4 2133 MHz已驱动硬盘LiteON SSD PCIe NVMe 512 GB [CA3-8D512]已驱动显卡NVIDIA GeForce MX150 (Disabled) / Intel(R) UHD Graphics 620已驱动声卡瑞昱ALC256 英特…

微积分——导数和切线问题

目录 1. 切线(Tangent Line)问题 2. 函数的导数(derivative) 3. 函数的可微性(differentiability)与连续性(Continuity) 1. 切线(Tangent Line)问题 微积分的出现源于17世纪欧洲数学家们正在研究解决的四个主要的问题: (1) 切线(tangent line)问题&#xf…

使用Alexnet实现CIFAR10数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用Alexnet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到224X224,因为在测试…

第03讲:Docker 容器的数据卷

一、什么是数据卷 数据卷是宿主机中的一个目录或文件,当容器目录或者文件和数据卷目录或者文件绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷,数据卷的作用:容器数据…

基于遥感卫星影像水体提取方法综述

水体提取分类依据及基础 水体提取分类依据 水体提取的方法很多,很多学者也进行了分类,大体上有一个分类框架,主要是基于光学影像的分类,比如王航等[7]将水体提取分成3类,分别是基于阈值法、分类器法和自动化法; 李丹等[8]更深一步进行总结,引入近些年发展火热的基于雷达影像数…

Redisson自定义序列化

配置RedissonClientBean public RedissonClient redissonClient() {Config config new Config();// 单节点模式SingleServerConfig singleServerConfig config.useSingleServer();singleServerConfig.setAddress("redis://127.0.0.1:6379");singleServerConfig.set…

LeetCode二叉树经典题目(六):二叉搜索树

目录 28. LeetCode617. 合并二叉树 29. LeetCode700. 二叉搜索树中的搜索 30. LeetCode98. 验证二叉搜索树 31. LeetCode530. 二叉搜索树的最小绝对差 32. LeetCode501. 二叉搜索树中的众数 33. LeetCode236. 二叉树的最近公共祖先​ 28. LeetCode617. 合并二叉树 递归&…

Hi3861鸿蒙物联网项目实战:智能安防报警

华清远见FS-Hi3861开发套件,支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能,开发板板载资源丰富,包括传感器、执行器、NFC、显示屏等,同时还配套丰富的拓展模块。开发板配套丰富的学习资料,包括全套开发教程…

Windows11 系统打开IE浏览器的方式(完整版)

前言 大家好,好久不见! 1、最近疯狂加班,旧电脑不太给力,换了新电脑,嘎嘎开心;开心之余发现新电脑是Win11系统的,但是IE浏览器找不到了,由于我的某些工作需要用到IE浏览器&#xf…

Vue2前端路由(vue-router的使用)、动态路由、路由和视图的命名以及声明式和编程式导航

目录 一、vue2的前端路由(vue-router) 1、路由:页面地址与组件之间的对应关系 2、路由方式:服务器端路由、前端路由 3、前端路由:在前端维护一组路由规则(地址和组件之间的对应关系)&#xf…

【UE4 第一人称射击游戏】34-制作一个简易计时器

上一篇:【UE4 第一人称射击游戏】33-创建一个迷你地图本篇效果:可以看到左上角有个简易的关卡计时器在倒计时步骤:打开“FPSHUD”,拖入一个图像控件图像选择“Timer_Backing”,尺寸改为4719拖入3个文本控件大小为1210字…

学习ffmpeg-录屏实现记录

项目需要一个录屏的功能,之前看到了一个使用Qt计时器截图avilib生成AVIffmpeg合并视频音频的方式:Qt C 录屏录音功能实现(avilibffmpeg)以及动态库生成https://blog.csdn.net/qq_35769071/article/details/125323624使用后&#x…

【.dll 没有被指定在windows上运行】

修复(重新注册DLL)的具体步骤如下: 方法一: 1、快捷键winr打开“运行”输入cmd,点击确定打开命令提示符窗口。 2、复制:for %1 in (%windir%\system32*.dll) do regsvr32.exe /s %1 命令,在打开的管理员…

ubuntu安装vue

首先建议使用ubuntu18.04以上的系统,不然会有类似fcntlGLIBC_2.28‘未定义的引用的报错 VUE官网:http://caibaojian.com/vue/guide/installation.html 其中安装说明只写到:npm install vue 我们还需要安装node.js、npm 1、安装 NVM&#xf…

Windows安装TensorRT

文章目录前言TensorRT下载TensorRT安装参考资料前言 本文将介绍Windows如何安装TensorRT。本文的基础是:Windows安装PytorchCUDA环境 TensorRT下载 进入官方网站:https://developer.nvidia.com/nvidia-tensorrt-8x-download 寻找自己对应的版本&#…