事务四大特性及隔离级别
事务四大特性及隔离级别
- 咱们都知道事务有四大特性ACID,也就原子性(atomicity|ætəˈmɪsəti|)、
- 一致性(consistency)、隔离性(isolation|aɪsəˈleɪʃn|)、持久性(durability)。
- 原子性是说把多个操作看成一个不可分割的整体,要么都成功,要么都失败。
- 一致性是说事务能保证数据从一个一致性状态到另外一个一致性状态,数据不被破坏。
- 隔离性是指一个事务的执行不被其他事务干扰。
- 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的。
在JDBC中, 事务默认是自动提交的,每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,即便后续执行过程中出现异常,前面执行成功的也不会回滚。 为了让多个 SQL语句作为一个事务执行:
(1) 执行语句前调用 Connection对象的 setAutoCommit(false)以取消自动提交事务
(2) 在所有的 SQL 语句都成功执行后,调用 commit()方法提交事务
(3) 在出现异常时,调用 rollback()方法回滚事务
本地事务平时在项目中用的比较多,都是用 SpringAOP 来进行本地事务的控制,这样可以将事务控制的代码提取出来成为一个切面,减少重复代码,让我们程序员在编程时将精力花在业务逻辑的处理上,不用再去操心开启事务,提交事务,回滚事务这些操作,因为这些操作都通过springAOP 帮我们实现了我们通常都是对 service 层中的增删改操作进行事务的控制,需要配置事务的传播特性为 propagation="required”,把增,删改以外的操作,也就是查询操作,重置成只读事务read-only=“true”这样以提高性能。默认情况下事务只对运行时异常进行回滚,可以通过rollback-for="Exception"使其对所有异常都进行回滚
事务的传播特性有7种,
1.PROPAGATION_REQUIRED – 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
2.PROPAGATION_SUPPORTS – 支持当前事务,如果当前没有事务,就以非事务方式执行。
3.PROPAGATION_MANDATORY – 支持当前事务,如果当前没有事务,就抛出异常。
4.PROPAGATION_REQUIRES_NEW – 新建事务,如果当前存在事务,把当前事务挂起。
5.PROPAGATION_NOT_SUPPORTED – 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6.PROPAGATION_NEVER – 以非事务方式执行,如果当前存在事务,则抛出异常。
7.PROPAGATION_NESTED – 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
最常用的就是 propagation="required”,它的意思就是支持当前事务,如果当前没有事务,就新建一个事务,我们在项目中用的就是这个,其余的几个记得不是太清楚了,好像还有 propagation=“SUPPORTS”,propagation ="REQUIRES NEW",
事务的隔离级别有四种,分别是读未提交,读提交,重复读和串行化
可参考 https://www.cnblogs.com/ubuntu1/p/8999403.html
- 读未提交:就是一个事务可以读取另一个未提交事务的数据,这样会产生脏读。
- 读提交:就是一个事务要等另一个事务提交后才能读取数据。可以解决脏读的问题,但会出现不可重复读的问题。不可重复读对应的是修改,也就是 update 操作.
- 重复读:就是在开始读取数据时,事务开启,不再允许修改操作。这样就可以解决不可重复读问题,但是可能会出现幻读的问题。因为幻读问题对应的是插入insert操作,而不是 update 操作.
- 串行化:是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读,但是它的性能特别低,所以一般不会使用。
大多数数据库默认的事务隔离级别是读提交,比如 SQLServer,Oracle,MySQL的默认隔离级别是重复读。
事务分为本地事务和分布式事务!!!
如果涉及到一个数据库中的操作,这时候本地事务就可以解决问题。
如果涉及到跨数据库的操作或者涉及到远程接口的调用,这时候就需要用到分布式事务了,分布式事务的解决方案有很多,可以使用开源的分布式事务框架比如说阿里的 Seata。
事务四大特性及隔离级别相关推荐
- 事务概念和事务四大特性和隔离级别
什么是事务 事务四大特性 原生的JDBC事务处理 事务的隔离级别
- mysql 四大基础操作_事务的四大特性和隔离级别
MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...
- 事务四大特性之——隔离性
事务四大特性之--隔离性 四大特性 一.4种隔离级别 二.案例 2.1 模拟业务需求 2.2 解决方案 且夫孝始于事亲,中于事君,终于立身. 孝的初始境界是侍奉自己的双亲,中层境界是侍奉自己的国君,最 ...
- 数据库事务的四大特性以及隔离级别
本篇文章主要介绍数据库事务的四大特性ACID,以及数据库的隔离级别. 事务 概念 事务指的是满足 ACID 特性的一系列操作.在数据库中,可以通过 Commit提交一个事务,也可以使用 Rollbac ...
- 数据库事务的四大特性和隔离级别
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行. 一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID).即 ...
- mysql特性举例_MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) #### 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2 ...
- 事务的四大特性和隔离级别
1.事务的四大特性(ACID):指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durabilit ...
- mysql四种隔离级别知乎_详解MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...
- mysql 默认事务隔离级别_详解MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...
最新文章
- redis list操作
- Linux-编辑器vim与nano的使用
- Python对象类型
- mysql qps如何查看_一款查看mysql QPS的脚本
- 工作216:JS-JS创建数组的三种方法
- 计算机领域hpec会议,2018 IEEE High Performance extreme Computing Conference HPEC
- 《C语言及程序设计》实践参考——输出小星星(全解)
- python 可视化界面 打开excel_python如何将excel数据处理可视化
- 回溯法解决八皇后问题
- 【自学51单片机】1 -- 初步认识单片机及其学习方法 和 单片机基础知识介绍
- 一、神经科学的过去,现在,未来
- 正版win8/win8.1系统激活密钥(key)备份还原操作步骤
- 淘宝/天猫上传图片到淘宝 API 返回值说明
- MXNet网络模型(四)GAN神经网络
- 什么是轻量应用服务器
- ue4显示变量_【程序猿】虚幻引擎4: 将C++变量暴露给蓝图
- windows云服务器部署web网站
- 大话软件测试_读书笔记
- IB中文课程介绍:语文的另一种可能
- 百会观点:用CRM深度维护老客户
热门文章
- 教你在Kubernetes中快速部署ES集群
- 华为云FusionInsight MRS:千余节点滚动升级业务无中断
- 连Python都不熟也能跑通AI人脸识别?“隐藏Boss”竟是它!
- 实战解析丨如何对Mysql连接请求的tcpdump内容进行分析
- “化鲲为鹏,我有话说”如何用鲲鹏弹性云服务器部署《Hadoop伪分布式》
- 【nodejs原理源码赏析(9)】用node-ssh实现轻量级自动化部署
- c语言出勤率随机,c
- 用php写出显示客户端ip与服务器ip的代码.,PHP面试题答案
- SpringBoot自动装配探究
- Poisson方程五点差分格式例题及解答