spring事务的隔离级别
来源:互联网 发布:淘宝助理出错 编辑:程序博客网 时间:2024/05/16 05:06
这里说的是spring事务的隔离级别,不是说的事务的传播规则。
对于事务一定满足ACID原则:
A(Atomicity):原子性,事务要么全部执行,要么全部不执行。
C(Consistency):一致性,事务在完成时,必须使所有的数据保持一致的状态。例如完整性约束了a+b=10,在完整性没有发生变化的时候,若a变化了,则b跟着一起变化,若出现错误则a回退到原先的状态,b也回到原先的状态,也即数据的状态是一致的。这里事务只是保证了数据状态的一致性。但是事务不负责数据完整性,仅仅负责数据在提交或终止后数据处于一致的状态,数据完整性开发通常是开发者的责任。
I(Isolation):隔离性,两个以上的事务不会交叉执行,因为这样的话会出现数据状态不一致的情况。
D(Durability):持久性,事务成功执行后,其效果也就是对数据库的更改是已经保存到数据库中了,不会无故发生回滚。
spring中事务的隔离级别有四种,从弱到强依次为:Read Uncommited ,Read Commited,Repeatable Read,Serializable
首先介绍当事务并发执行的时候可能出现的三个问题:
1,读取脏数据(Dirty Read)
如果一个事务对数据进行了更新,但事务还没提交,另一个事务可以看到该书屋没有提交的更新数据,当原事务发生回滚的时候,由于事务未提交,则数据没有成功回写到数据库,另一个事务看到的数据就是脏数据。
2,不可重复读(Non-Repeatable Read)
同一个事务在整个事务过程中对同一笔数据进行读取,而每次的读取数据都不同。例如事务A中两处读取数据-total-的值。在第一读的时候,total是100,然后事务B就把total的数据改成 200,事务A再读一次,结果就发现,total竟然就变成200了,造成事务A数据混乱。
3,幻读(Phantom Read)
同一次查询得到的结果集不同,而不可重读是同一数据的查询。具体来说幻读和不可重复读类似,也是同一个事务多次读不一致的 问题,但不可重复读的不一致是因为所要查询的数据集发生了变化,而幻读的数据不一致是因为条件数据集的变化。例如select account.id where account.name=”hl174”,第一次查询得到是6 个满足条件的id,但是事务b把一个账号的名字改为了hl174,则第二次读取就有7个数据了。
Read Uncommited -最低级别的事务隔离,其结果就是一个事务可以读取另一个事务并未提交的更新结果,也就是读取脏数据了
Read Commited-通常情况下大部分数据库采用的默认隔离级别,保证一个事务不会读到另一个并行事务已修改但未提交的事务,避免了读取脏数据的可能,但是无法避免不可重复读和幻读的问题
Repeatable Read-保证在整个事务过程中,对同一笔数据的读取结果是相同的,不管其他事务是否同时在对同一笔数据进行更新,也不管其他事务对同一笔数据的更新提交与否。 Repeatable Read隔离级别避免了脏读和不可重复读取的问题,但无法避免幻读
Serializable-最为严格的隔离级别,所有的事务操作都必须依次顺序执行,可以避免其他隔离级别遇到的所有问题,是最为安全的隔离级别, 但同时也是性能最差的隔离级别,因为所有的事务在该隔离级别下都需要依次顺序执行,所以,并发度下降,吞吐量上不去,性能自然就下来了。 因为该隔离级别极大的影响系统性能,所以,很少场景会使用它。通常情况下,我们会使用其他隔离级别加上相应的并发锁的机制来控制对数据的访问,这样既保证了系统性能不会损失太大,也能够一定程度上保证数据的一致性
对于数据库来说,通常都有一个默认的隔离级别,大多数情况下都是ReadCommitted,只有Hsqldb使用Read UnCommited作为默认隔离级别。 而且,并非所有的数据库都支持这四种隔离级别,比如Oracle只支持Read Committed和Serializable,如果你指定的隔离级别当前数据库不支持的话, 数据库会采用默认的隔离级别代替你指定的隔离级别。EJB,Spring,JDBC等数据访问方式都允许我们为事务指定以上提到的四种隔离级别,但最终事务是否以指定的隔离级别执行,则由底层的数据资源来决定
- Spring事务的隔离级别
- spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring的事务隔离级别
- Spring事务的隔离级别
- spring的事务隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- Spring事务的隔离级别
- spring事务的隔离级别
- java IO练习
- oracle树结构查询
- Bootstrap每天必学之js插件
- 贩妖记 > 第四十五章,怨气法宝
- 游戏中读取物品,各种资源配置,用于各种配置
- spring事务的隔离级别
- 平衡二叉树
- 数据的归一化处理
- 静态方法及异常处理
- JavaMail发送和接收邮件
- Android Animations动画之简单学习
- Android关于处理运行时变化如横竖屏切换等问题
- J2EE:MyEclipse中不能将WEB项目发布到TOMCAT中解决办法
- Animate.css 一款强大的预设css3动画库