事务的特性,API、隔离级别、传播行为

一、事务

1、事务的介绍

      事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。
2、事务的使用场景

       例如在日常生活中,有时我们需要进行银行转账,这个银行转账操作背后就是需要执行多个SQL语句,假如这些SQL执行到一半突然停电了,那么就会导致这个功能只完成了一半,这种情况是不允许出现的,要想解决这个问题就需要通过事务来完成。

二、事务的四大特性

原子性(Atomicity)
       要么都执行,要么都不执行

一致性(Consistency)
       事务前后的数据都是正确的

隔离性(Isolation)
      事物之间相互隔离,互不干扰(并发执行的事务彼此无法看到对方的中间状态)

持久性(Durability)
       事务一旦提交不可再回滚 

三、Spring中事务控制的API

PlatformTransactionManager接口是spring的事务管理器,它里面提供了我们常用的操作事务的方法

public interface PlatformTransactionManager { //开启事务  TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; //提交事务void commit(TransactionStatus status) throws TransactionException; //回滚事务void rollback(TransactionStatus status) throws TransactionException;   
} 

TransactionDefinition接口  定义事务的属性

//传播行为int getPropagationBehavior();//隔离级别int getIsolationLevel();//事务超时int getTimeout();//是否只读boolean isReadOnly();

四、事务的隔离级别

隔离级别是否脏读是否不可重复度是否幻读
ISOLATION_DEFAULTxx
ISOLATION_READ_UNCOMMITTED
ISOLATION_READ_COMMITTEDx
ISOLATION_REPEATABLE_READxx
ISOLATION_SERIALIZABLExxx
问题描述隔离级别
脏读一个事务读取到另一个事务还未提交的数据read-commited
不可重复读一个事务内多次读取一行数据的内容,其结果不一致repeatable-read
幻读一个事务内多次读取一张表中的内容,其结果不一致serialized-read

 五、事务的传播行为

事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。

Spring中事务的七种传播行为

事务传播行为类型说明
PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择
PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW无论当前是否存在事务,都新建事务,如果当前存在事务,把当前事务挂起。新事务结束后再恢复旧事务。
PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果存在事务则暂停该事务直到方法执行完毕。
PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执行,即子事务。如果当前没有事务,则其行为如同PROPAGATION_REQUIRED,会新建一个事务。

 1是默认的事务传播行为(加入事务,要么全部回滚,要么全部执行)

4中,如果原来的事务中发生异常,新建事务没有异常,原来的事务会回滚,新建事务会执行

7是嵌套在事务内执行,也是要么回滚,要么全部执行,只不过和1的执行方式不同

六、事务的回滚规则

rollbackOn 回滚规则,可省略或设置 rollbackOn="Exception",

 可省略:运行时异常回滚,编译时异常不回滚

  • 如果事务中抛出 RuntimeException,则自动回滚

  • 如果事务中抛出 CheckException,不会自动回滚

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

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

相关文章

就业班 2401--3.11 Linux Day15--ftp数据传输测试server和client+谷歌验证码登录远程连接

文件服务器 路漫漫其修远兮,吾将上下而求索.构建NFS远程共享存储 一、NFS介绍 文件系统级别共享(是NAS存储) --------- 已经做好了格式化,可以直接用。 速度慢比如:nfs,sambaNFS NFS:Networ…

用A*算法求解八数码问题

用A*算法求解八数码问题 实现两种启发函数实现A*算法测试 实现两种启发函数 采取两种策略实现启发函数: 策略1:不在目标位置的数字个数策略2:曼哈顿距离(将数字直接移动到对应位置的步数总数) # 策略1: 不在目标位置…

蓝桥杯每日一题 (递推、递归、)

3777. 砖块&#xff08;每日一题&#xff09; 后面if条件判断很巧妙&#xff0c;只要有一种成立就不管另一种了。 #include<bits/stdc.h> using namespace std; //3777. 砖块 //跟贪心差不多 string s; int t,n;void update(char &c) {if(cW)cB;else cW; }bool che…

shell文本处理工具-shell三剑客1

shell脚本常用基础命令2 shell脚本常用基础命令 shell脚本常用基础命令2一、grep用法二、sed用法2.1p参数 &#xff08;显示&#xff09;n参数&#xff08;只显示处理过的行&#xff09; 文本处理三剑客&#xff1a;grep sed awk 一、grep用法 grep -E egrep (扩展搜索正文表…

NUMA简介

NUMA 1 什么是NUMA 早期的计算机&#xff0c;内存控制器还没有整合进 CPU&#xff0c;所有的内存访问都需要经过北桥芯片来完成。如下图所示&#xff0c;CPU 通过前端总线&#xff08;FSB&#xff0c;Front Side Bus&#xff09;连接到北桥芯片&#xff0c;然后北桥芯片连接到…

如何查看一个进程有几个子进程

要查看一个进程有多少个子进程&#xff0c;一种方法是通过在命令行上使用 ps 命令结合 pgrep 命令。 pgrep -P <parent_pid> | wc -l其中&#xff1a; <parent_pid> 是你要查看的父进程的进程号&#xff08;PID&#xff09;。 这个命令会列出指定父进程的所有子…

Java集合详解(单列集合 | 双列集合 | Collections集合工具类)

○ 前言&#xff1a; 在开发实践中&#xff0c;我们需要一些能够动态增长长度的容器来保存我们的数据&#xff0c;java中为了解决数据存储单一的情况&#xff0c;java中就提供了不同结构的集合类&#xff0c;可以让我们根据不同的场景进行数据存储的选择&#xff0c;如Java中提…

xpath基础入门

一、XPath是什么 XPath 定位 HTML 文档中的元素的工具 XPath 是一种表达语言&#xff0c;旨在支持XML文档的查询或转换。 XPath由万维网联盟(W3C) 于 1999 年定义。 XPath支持 XML 的应用程序&#xff08;例如 Web 浏览器&#xff09;和许多编程语言都支持 XPath。 XPath 语言…

Tensorflow2.0笔记 - 均方差MSE和交叉熵CROSS ENTROPHY作为损失函数

本笔记主要记录使用MSE和交叉熵作为loss function时的梯度计算方法。 import tensorflow as tf import numpy as nptf.__version__#softmax函数使用 #参考资料&#xff1a;https://blog.csdn.net/u013230189/article/details/82835717 #简单例子&#xff1a; #假设输出的LOGIT…

24计算机考研调剂 | 佳木斯大学

佳木斯大学计算机科学与技术、电子信息招调剂生 考研调剂招生信息 学校:佳木斯大学 专业:工学->电子信息 年级:2024 招生人数:- 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 黑龙江省自主智能与信息处理重点实验室马慧彬…

maven 安装

maven 安装 maven 下载解压添加自定义仓库位置修改配置文件环境变量配置测试idea 设置 maven 下载 下载 Apache Maven 解压 添加自定义仓库位置 repository 修改配置文件 修改 maven\conf\settings.xml 文件&#xff0c; 主要是 localRepository (更改自己路径) 和 mirro…

基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(五)——多条件搜索并分页展示

前后端数据交互 书接上文&#xff0c;我们上节课通过前后端数据交互实现了分页查询和单条件搜索分页查询的功能&#xff0c;最后留了个小尾巴&#xff0c;就是把其他两个搜索条件&#xff08;email,address&#xff09;也加进来&#xff0c;实现多条件搜索并分页展示。这节课我…

计算机网络-第5章 运输层(1)

主要内容&#xff1a;进程之间的通信与端口、UDP协议、TCP协议、可靠传输原理&#xff08;停止等待协议、ARQ协议&#xff09;、TCP报文首部、TCP三大题&#xff1a;滑动窗口、流量控制、拥塞控制机制 5.1 运输层协议概述 运输层向它上面的应用层提供通信服务&#xff0c;真正…

java技术面试100问?

当今软件开发领域中&#xff0c;Java作为一门广泛应用的编程语言&#xff0c;已经成为了众多企业和开发者的首选。其稳定性、可靠性以及丰富的生态系统&#xff0c;使其成为了构建各种类型应用的理想选择。然而&#xff0c;要想在竞争激烈的技术行业中脱颖而出&#xff0c;除了…

深入理解React中的useState:函数组件状态管理的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

24计算机考研调剂 | 燕山大学【211】

燕山大学接收调剂研究生 考研调剂招生信息 学校:燕山大学 专业:工学->电子科学与技术->物理电子学 年级:2024 招生人数:5 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 要求考生一志愿报考211及以上全国重点院校&…

代码随想录算法训练营第四十八天| 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

文章目录 1.买卖股票的最佳时机2.买卖股票的最佳时机II 1.买卖股票的最佳时机 给定一个数组 prices&#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择某一天买入这只股票&#xff0c;并选择在未来的某一个不同的日子卖出该股票。设计一个算…

嵌入式学习第二十六天!(网络传输:TCP编程、HTTP协议)

TCP通信&#xff1a; 1. TCP发端&#xff1a; socket -> connect -> send -> recv -> close 2. TCP收端&#xff1a; socket -> bind -> listen -> accept -> recv -> send -> close 3. TCP需要用到的函数&#xff1a; 1. co…

蓝桥杯2023真题(4)

1.景区导游&#xff08;树上前缀和、最近公共祖先&#xff09; 思路 路线&#xff1a;2 -> 6 -> 5 -> 1 1.一个点都不去去掉的花费记作sum 2.去掉第一个点&#xff0c;sum - cost[2 -> 6] 3.去掉第二个点&#xff0c;sum - cost[2 -> 6] - cost[6 -> 5] co…

计算机网络笔记(湖科大教书匠版本)

第一章、 ①三种交换方式 电路交换、分组交换、报文交换&#xff08;被分组交换所取代&#xff09; 1.电路交换&#xff1a;会一直占用通道&#xff0c;不适合计算机之间的数据通信 2.分组交换&#xff1a;通常我们把表示该数据的整块数据称为一个报文。 先把较长的报文划…