400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

怎么理解事务隔离级别、MVCC、spring事物传播属性

本篇内容介绍了“怎么理解事务隔离级别、MVCC、spring事物传播属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联服务项目包括杭锦后网站建设、杭锦后网站制作、杭锦后网页制作以及杭锦后网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,杭锦后网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到杭锦后省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

数据库事务隔离级别

数据库有四种事务隔离级别

以上事务隔离级别依次递增,但是性能依次递减。
MySQL支持以上四种隔离级别,其默认是:可重复读(Repeatable read)。
oracle数据库支持READ COMMITTED 和 SERIALIZABLE两种。
oracle和PostgreSQL默认是:读已提交(Read committed)。

隔离级别详解

以上四种隔离分别会出现以下问题

隔离级别脏读不可重复读幻读
读未提交(Read uncommitted)可能可能可能
读已提交(Read committed)不可能可能可能
可重复读(Repeatable read)不可能不可能可能
串行化(Serializable)不可能不可能不可能

MVCC

Mysql默认事务隔离级别是RR,MVCC可以保证在RC和RR模式下实现可重复读:
每个表中会存在两个隐藏的字段:crate_version、delete_version,这两个字段都是用来记录当前的事物ID(事物ID数据库自增)。

insert:添加数据时会记录create_version。  
delete:删除数据时会更新delete_version。  
update:更新数据时会将动作拆分为insert+delete,即新增一条数据,并且吧旧数据delete_version更改为当前事物ID。  

select:查询数据时,在满足条件的记录上判断:  
1.create_version小于等于当前查询事物的ID(并发插入不可见)  
2.delete_version为空,或者大于当前版本ID(并发删除可见)

由此看来,数据的更新操作并不会影响查询的数据,实现了可重复读。

PS: 由于旧数据并不会真正删除,所以innodb会开启后台线程执行清理工作:将删除版本号小于当前事物ID的版本进行清理,这个过程叫做purge。

Spring事务传播特性

事务传播特性是指,当多个方法形成一个调用链时,事务是如何传播的(如A方法中调用了B方法,那么事务是以哪种方式传播给B)。
spring只提供事务管理器,其实现交给hibernate等其他框架;Spring定义了7中传播行为(org.springframework.transaction包中的TransactionDefinition接口):

spring事务隔离级别

“怎么理解事务隔离级别、MVCC、spring事物传播属性”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网站名称:怎么理解事务隔离级别、MVCC、spring事物传播属性
文章URL:http://mzwzsj.com/article/gsidjc.html

其他资讯

让你的专属顾问为你服务