spring事务隔离级别 spring事务的传播属性
事务的四个属性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。
1.原子性(Atomic)
最重要的原则,也是最容易理解的原则。被事务管理的所有方法,要么一起被提交,要么一起回滚。
举例:在股票交易时,除了记录交易的过程,还要更新交易完成之后的账户状态。
2.一致性(Consistency)
事务在系统完整性中实施一致性,如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于新有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。
3.隔离性(Isolation)
简单的说:在处理一个事务的时候,如果有一个事务同时处理,必须等待这个事务处理完毕,才能进行下一次处理
举例:一个厕所就一个马桶,必须一个人上完,例外一个人再进去上.
4.持久性(Durability)
持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。应该存在一些检查点防止在系统失败时丢失信息。甚至硬件本身失败,系统的状态仍能通过在日志中记录事务完成的任务进行重建。
举例:在执行事务的时候,突然停电,等再来电的时候,有个事务记录通知重新执行下这个事务.
事务隔离级别
一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。
数据库并发操作存在的异常情况:(当没有事务存在的情况下会发生以下情况)
1. 更新丢失(Lost update):同时改,更新丢失
2. 脏读取(Dirty Reads):一个在读另外一个没提交的数据,为脏读(有可能人家不提交了)
3. 非重复读取(Non-repeatable Reads):一个不停在读,一个在修改或者删除(数据总量可能不变或减少)
4. 两次更新问题(Second lost updatesproblem):一个读完修改,另外一个读完修改,后者成功(与更新丢失区别是,那是同时该,这个是一前一后)
5. 幻读(PhantomReads):一个不停在读,一个在添加一条记录(数据总量变了)与非重复读的区别就是那个是修改删除,这个是添加
为了避免上面出现几种情况在标准SQL规范中定义了4个事务隔离级别,不同隔离级别对事务处理不同 。
1.未授权读取:也称未提交读.如果一个事务开始写数据,其他写数据的动作将等待,但是允许其他事务读取,(排他锁)
2.授权读取:也称提交读.
3.可重复读取:禁止不可重复读取和脏读取。但是有时可能出现幻影数据
4.串行(Serializable):也称可串行读。提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作事务访问到。事务隔离的最高级别,事务之间完全隔离。如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。
隔离级别 更新丢失 脏读取 重复读取 幻读
未授权读取N Y Y Y
授权读取 N N Y Y
可重复读取N N N Y
串行 N N N N
Spring事务隔离级别:
PROPAGATION_REQUIRED 如果没事务,就新建事务
简单的说:一个方法要运行,先看看自己在不在一个事务内部,如果在,好我什么都不说,好好工作(不启新事务),如果不在,我新建一个事务出来,然后在这个新建事务内运行我(我就是那个方法);
PROPAGATION_SUPPORTS 有事务就支持当前事务,没有事务就已非事务执行
简单的说:一个方法比较随意,我上面有事务,我就在事务里运行,如果没事务,我就是非事务运行.
PROPAGATION_MANDATORY 有事务的话就支持当前事务,没有就抛异常
简单的说:这个方法必须在事务中运行,不然就要大叫:我异常了. 他只能被父事务调用
PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,就把当前事务挂起,然后建立一个事务出来执行,执行完毕,再去执行刚才挂起的那个事务.
简单的说:我不管上面有没有事务在,我是要新建事务的, 如果没有好说,我自己做自己的事,如果有,那要先等我,我将事务处理完毕后,再处理外部事务吧.如果我处理失败,我自己回滚,不影响外面的事务,你回滚不回滚不关我的事.
PROPAGATION_NOT_SUPPORTED 以非事务工作,如果当前有事务,那就挂起当前事务
简单的说:声明自己的是个非事务,如果有事务和我同时执行,那事务先挂起,等我运行完,你在处理
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,就抛异常.
简单的说:一个方法,就是不让事务包着,包着就出异常
PROPAGATION_NESTED
理解Nested的关键是savepoint。他与PROPAGATION_REQUIRES_NEW的区别是,PROPAGATION_REQUIRES_NEW另起一个事务,将会与他的父事务相互独立,而Nested的事务和他的父事务是相依的,他的提交是要等和他的父事务一块提交的。也就是说,如果父事务最后回滚,他也要回滚的。
而Nested事务的好处是他有一个savepoint。也就是说ServiceB.methodB失败回滚,那么ServiceA.methodA也会回滚到savepoint点上,ServiceA.methodA可以选择另外一个分支,比如ServiceC.methodC,继续执行,来尝试完成自己的事务。 但是这个事务并没有在EJB标准中定义
更多阅读
隔离霜和防晒霜的区别 教你方法选对产品 隔离霜与防晒霜的区别
?隔离霜和防晒霜的区别 教你方法选对产品 还有护肤小技巧哦隔离霜和防晒霜的区别,其实有很多姐妹还是分不清的。秋天的紫外线很猛烈,隔离防晒还是要做足。很多姐妹都在纠结到底是用防晒霜还是用隔离霜,搞不清隔离霜和防晒霜的区别。简
隔离霜和防晒霜的区别 防晒霜怎么用才正确
太阳十分的毒辣的夏天来了,很多MM都在纠结到底是用防晒霜还是用隔离霜,搞不清他俩有什么区别,蔻妍护肤来告诉你。隔离霜和防晒霜的区别——步骤/方法隔离霜和防晒霜的区别 1、一、防晒霜和隔离霜的区别
肺结核的传播途径 淋巴结核传染吗
肺结核的传播途径主要是什么?很多人在被查出自己患有肺结核的时候很迷惑,自己是如何患有肺结核,现在得了肺结核会不会又才传染给其他的人,肺结核依靠什么方式来传染,下面就来了解一下。肺结核的传播途径——工具/原料肺结核是一种传染性
《光的传播》教学反思 光的传播
《光的传播》教学反思杏岭学校 刁迎《光的传播》这节课的教学内容比较简单,重点是让学生在探究活动中获得观察能力、分析能力、总结归纳能力的培养。根据这一点,我在设计这节课时让学生观察老师演示实验并亲自动手做实验,从实验现象
警惕!!!新病毒的传播:类似“获得性免疫缺陷症”
警惕!!!新病毒的传播:类似“获得性免疫缺陷症”症状:病的主要症状是,感染后一般在一周到三个月出现症状,其症状类似“获得性免疫缺陷症”病症,与HIV感染导致的免疫缺陷症状极为相似。但大多数病患经多次检查HIV-1和HIV-2,而其抗体均为阴性。