对脏读|不可重复度|幻读的理解以及Spring定义的五种事务隔离级别

本文深入探讨了Spring中事务隔离级别的概念及其在不同情况下的应用,包括默认隔离级别、最低隔离级别、读已提交隔离级别、可重复读隔离级别以及串行化隔离级别的特性与区别,同时强调了在基于Spring的事务配置中谨慎使用串行化隔离级别的重要性,以避免性能影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=small;]查阅网上的一些资料和自己实践体会后,弄了如下心得。不知是否恰当正确,发出来大家点评一下:[/size]
[size=small;]<br>[/size]
[size=small;]<br>[/size]
[size=small;]在spring中定义了5中不同的事务隔离级别。[/size]
[size=small;]1. isolation_default(一般情况下使用这种配置既可)[/size]
[size=small;]这是一个platfromtransactionmanager默认的隔离级别,使用数据库默认的事务隔离级别。[/size]
[size=small;]2. isolation_read_uncommitted[/size]
[size=small;]这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。[/size]
[size=small;](大部分数据库缺省的事物隔离级别都不会出现这种状况)[/size]
[size=small;]3. isolation_read_committed  [/size]
[size=small;]保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。[/size]
[size=small;]什么是脏读?[/size]
[size=small;]例如:[/size]
[size=small;]张三的工资为5000,事务a中把他的工资改为8000,但事务a尚未提交。[/size]
[size=small;]与此同时,[/size]
[size=small;]事务b正在读取张三的工资,读取到张三的工资为8000。[/size]
[size=small;]随后,[/size]
[size=small;]事务a发生异常,而回滚了事务。张三的工资又回滚为5000。[/size]
[size=small;]最后,[/size]
[size=small;]事务b读取到的张三工资为8000的数据即为脏数据,事务b做了一次脏读。[/size]
[size=small;](大部分数据库缺省的事物隔离级别都不会出现这种状况)[/size]
[size=small;]4. isolation_repeatable_read  [/size]
[size=small;]这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。[/size]
[size=small;]什么是不可重复读?[/size]
[size=small;]例如:[/size]
[size=small;]在事务a中,读取到张三的工资为5000,操作没有完成,事务还没提交。[/size]
[size=small;]与此同时,[/size]
[size=small;]事务b把张三的工资改为8000,并提交了事务。[/size]
[size=small;]随后,[/size]
[size=small;]在事务a中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读。[/size]
[size=small;](大部分数据库缺省的事物隔离级别都不会出现这种状况)[/size]
[size=small;]5. isolation_serializable[/size]
[size=small;]这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻读。[/size]
[size=small;]什么是幻读?[/size]
[size=small;]例如:[/size]
[size=small;]目前工资为5000的员工有10人,事务a读取所有工资为5000的人数为10人。[/size]
[size=small;]此时,[/size]
[size=small;]事务b插入一条工资也为5000的记录。[/size]
[size=small;]这是,事务a再次读取工资为5000的员工,记录为11人。此时产生了幻读。[/size]
[size=small;](大部分数据库缺省的事物隔离级别都会出现这种状况,此种事物隔离级别将带来表级锁)[/size]
[size=small;]<br>[/size]
[size=small;]说明 :oracle数据库缺省的事物隔离级别已经保证了避免脏读和不可重复读。但可能会幻读,避免幻读需要加表级锁,oracle缺省行级锁。在基于spring的事物配置中一定要慎重使用isolation_serializable的事物隔离级别。这种配置会使用表级锁,对性能影响巨大。一般没有特殊需要的话,配置为使用数据库缺省的事物隔离级别便可。[/size]
 
[b]如下为开源产品分享:[/b]
<br><img src="http://dl.iteye.com/upload/attachment/530117/6cd2f318-6ed2-3d84-80de-959202ddf8dd.jpg" alt="">
 
 
<span style="border-collapse: collapse; color: #444444; font-family: tahoma, helvetica, simsun, sans-serif; font-size: 14px; line-height: 21px;"><span style="font-family: tahoma;">[size=x-small;]<span style="color: #000000;">g4studio是一套面向中小软件企业及个人开发者的集设计、开发、部署、后期维护于一体,力求覆盖整个软件生命周期的高品质[/size]<strong style="font-weight: 700;"><span style="color: #00ff00;"><span style="background-color: black;">开源</span></span></strong></span></span></span><span style="border-collapse: collapse; color: #444444; font-family: tahoma, helvetica, simsun, sans-serif; font-size: 14px; line-height: 21px;"><span style="font-family: tahoma;">[size=x-small;]<span style="color: #000000;">产品套件。[/size]</span></span></span>
 
源码下载及在线演示:
[url=http://www.g4studio.org/thread-12-1-1.html]http://www.g4studio.org/thread-12-1-1.html[/url]
<div><br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值