Java提升篇-事务隔离级别和传播机制
转载自 Java提升篇-事务隔离级别和传播机制
问题的提出
为了保证并发操作数据的正确性及一致性,SQL规范于1992年提出了数据库事务隔离级别。
事务隔离级别分类
事务隔离级别由低往高可分为以下几类
READ UNCOMMITTED,读取未提交的数据。
这是最不安全的一种级别,查询语句在无锁的情况下运行,并能读取到别的未提交的数据,造成脏读,如果未提交的那个事务数据全部回滚了,而之前读取了这个事务的数据即是脏数据,这种数据不一致性读造成的危害是可想而知的。
READ COMMITTED,读取已提交的数据。
一个事务只能读取数据库中已经提交过的数据,解决了脏读问题,但不能重复读,即一个事务内的两次查询返回的数据是不一样的。如第一次查询金额是100,第二次去查询可能就是50了,这就是不可重复读取。
REPEATABLE READ,可重复读取数据,这也是Mysql默认的隔离级别。
一个事务内的两次无锁查询返回的数据都是一样的,但别的事务的新增数据也能读取到。比如另一个事务插入了一条数据并提交,这个事务第二次去读取的时候发现多了一条之前查询数据列表里面不存在的数据,这时候就是传说的中幻读了。这个级别避免了不可重复读取,但不能避免幻读的问题。
SERIALIZABLE,可串行化读。
这是效率最低最耗费资源的一个事务级别,和可重复读类似,但在自动提交模式关闭情况下可串行化读会给每个查询加上共享锁和排他锁,意味着所有的读操作之间不阻塞,但读操作会阻塞别的事务的写操作,写操作也阻塞读操作。
上面介绍了4种事务隔离级别及脏读、不可重复读、幻读与它们的联系,对应的关系表如下:
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读取未提交 | √ | √ | √ |
读取已提交 |
× |
√ | √ |
可重复读 |
× |
× |
√ |
可串行化读 |
× |
× |
× |
Mysql官方对于事务级别的定义可参考:
https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html
扩展
上面介绍的是Mysql的事务隔离级别,那跟spring中的事务隔离级别有什么必然的联系呢?
spring就是对数据库事务进行了封装而已,并提了5种事务隔离级别和7种事务传播机制。
5种事务隔离级别
ISOLATION_DEFAULT
spring将使用数据库中默认的事务隔离级别。
下面四种定义和上面一致。
ISOLATION_READ_UNCOMMITTED 4 p" L. I' F; k1 {) a. D( E5 ?: V
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
7种事务传播机制
REQUIRED
如果当前方法有事务则加入事务,没有则创建一个事务。
NOT_SUPPORTED
不支持事务,如果当前有事务则挂起事务运行。
REQUIREDS_NEW
新建一个事务并在这个事务中运行,如果当前存在事务就把当前事务挂起。新建的事务的提交与回滚一挂起事务没有联系,不会影响挂起事务的操作。
MANDATORY
强制当前方法使用事务运行,如果当前没有事务则抛出异常。
NEVER
当前方法不能存在事务,即非事务状态运行,如果存在事务则抛出异常。
SUPPORTS
支持当前事务,如果当前没事务也支持非事务状态运行。
NESTED
如果当前存在事务,则在嵌套事务内执行。嵌套事务的提交与回滚与父事务没有任务关系,反之,当父事务提交嵌套事务也一起提交,父事务回滚会也回滚嵌套事务的。
如果当前没有事务,则新建一个事务运行,这时候则与PROPAGATION_REQUIRED场景一致。
Java提升篇-事务隔离级别和传播机制相关推荐
- 【事务隔离级别和传播机制】
事务隔离级别和传播机制是关于事务的两个重要概念,下面分别进行介绍: 事务隔离级别: 在数据库中,事务隔离级别是指多个事务之间相互隔离的程度.常见的事务隔离级别有四个,从低到高依次是: 读未提交(Rea ...
- mysql事务隔离级别及传播机制
TRANSACTION(事务隔离级别) 在说明事务隔离级别之前先说一下脏读.不可重复读.幻读这三个概念. 脏读:一个事务读取到另一事务未提交的更新新据.当一个事务正在访问数据,并且对数据进行了修改,而 ...
- Java事务的ACID属性和四种隔离级别和传播机制
事务的ACID属性 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity).一致性(Consistency).隔离性(Isolation ...
- 事务隔离级别和传播行为
事务隔离级别和传播行为 再次之前自认为我对数据库事务和隔离级别很熟悉了,至少以前整理过,看过网上很多文章,有些带有命令行操作的印象挺深,但是事务传播(包块调用外部系统服务).分布式锁.mybatis一 ...
- mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制
回顾前文: <一文学会MySQL的explain工具> <一文读懂MySQL的索引结构及查询优化> (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论 ...
- MySQL深度剖析之事务隔离级别和锁机制(2021)
一 事务隔离级别和锁机制 1.1 多个事务并发修改同一条数据或者对同一条数据并发读写存在哪些事务并发问题 1.1.1 脏读(未提交读) A事务读取了别的事务还未提交的更新,而B事务是有可能回滚的. 1 ...
- MySQL锁、事务隔离级别、MVCC机制详解、间隙锁、死锁等
一. 简介 1. 锁定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并 ...
- spring 事务隔离级别和传播行为_Java工程师面试1000题146-Spring数据库事务传播属性和隔离级别...
146.简介一下Spring支持的数据库事务传播属性和隔离级别 介绍Spring所支持的事务和传播属性之前,我们先了解一下SpringBean的作用域,与此题无关,仅做一下简单记录. 在Spring中 ...
- 事务隔离级别和传播行为_.spring的事务有几种方式?spring事务的隔离级别和传播行为是什么?...
展开全部 Spring提供了许多内置事务管理器实现,常用的有: DataSourceTransactionManager(JDBC局部事务):62616964757a686964616fe59b9ee ...
最新文章
- 全美国的数据中心到底消耗了多少能源
- aix解压tgz_AIX 上压缩与解压缩 各种文件格式原理说明
- Elasticsearch深入11 运维
- “物联网+云平台”的实验室管理方案,瞄准的是生物医药和化工行业
- CCNA学习指南第二章
- 文献记录(part25)--ACDnet An action detection network for real-time edge computing based on flow-guided
- android EditText 控件中加入图片(非背景图片)
- C4D电商促销素材模板,让你的工作效率更加高效​!
- 【CCCC】L3-019 代码排版 (30分),大模拟
- 【数字全排列】LeetCode 46. Permutations
- 操作Visual Studio 2010中的SQL Server数据库比较工具
- 禁止国外IP连接服务器
- 【算法基础三】算法如何入门?零基础入门算法应该学些什么?
- 惠普win7驱动_win7怎么样打开无线网卡开关
- H3CIE-----这只是一个过程!
- 计算机应用专业UI设计方向,长沙经贸职业中专学校计算机应用技术(UI设计方向)简介...
- 抖音直播流实时下载附源码
- MySQL数据库之SQL的各种操作/Html/Java和XML的关系
- vivado里那些看不懂的原语
- 我的前半生之十四,谈论富婆是一种高级趣味
热门文章
- [数据结构-严蔚敏版]P95矩阵压缩-特殊矩阵的存储(对称矩阵,三角矩阵)
- C++ 带默认参数值的函数
- 中获取文件名不要扩展名_如何批量修改文件名,3s时间够不够
- 数据结构---B-(B)、B+的总结
- Java基础知识——Sting、StringBuild、StringBuffer的区别
- 【NOI2012】迷失游乐园【概率期望】【换根dp】【基环树】
- [ZJOI2016]小星星
- JavaWeb --第三章 HTTP协议详解
- Codeforces Round #757 (Div. 2)
- AtCoder 4169 [ARC100D] Colorful Sequences(dp)