spring事务的传播属性,数据库事务特征,隔离级别
来源:互联网 发布:js汉字转unicode编码 编辑:程序博客网 时间:2024/05/22 00:18
一.Spring的7个事务的传播行为属性
1.REQUIRED(必须的)
业务方法需要在一个事务中运行,如果已经处在了一个事务中,那么就加入该事务,否则创建一个新的事务,这也是Spring默认的事务传播行为。
2.SUPPORTS(支持的)
如果业务方法在某个事务范围内被调用,那么该方法加入该事务,如果业务方法在事务范围外被调用,那么该业务方法将在没有事务的环境下执行。
3.MANDATORY(托管的,强制的)
业务方法只能在已经存在的事务中执行,业务方法不能发起新的事务,如果业务方法在事务范围外被调用,将抛出异常。
4.REQUERES_NEW
业务方法总是会为自己创建发起一个新的事务,如果方法已经运行在一个事务中,那么旧的事务会被挂起,业务方法发起新的事务,知道方法执行结束,新事务提交,旧的事务才会继续恢复执行。
5.NOT_SUPPORTED
如果业务方法被一个已经存在的事务调用,那么还事务会被挂起,直到业务方法执行结束
6.NEVER
业务方法绝对不能在事务中执行,如果在事务环境中执行,容器会抛出异常,只有没有关联到事务,才能正常执行。
7NESTED(嵌套的)
如果活动的事务已经存在,则运行在一个嵌套的事务中,如果不存在,执行方式将和REQUIRED相同,运行在嵌套的事务中时,内部事务的回滚对外部事务没有影响。
二.数据库事务的四大特性
1.原子性(Atomicity)
每一个事务都是不可分割的最小单位,一个事务中包含的所有操作要么全部执成功,要么全部失败回滚。
2.一致性(Consistensy)
一致性是指一个事务执行前后,数据库的状态必须是由一个一致性状态到另一个一致性状态,举个例子:账户A中有1000,账户B中有2000,从A中转500给账户B,转账前后,A,B总额一直为3000。
3.隔离性(Isolation)
是指当多个用户并发访问同一个数据库,修改统一张表,数据库会为每个用户开启一个独立的事务,多个事务相互隔离,每个事务都察觉不到有别的事务存在。
4.持久性(Durability)
持久性是指,一个事务一旦提交,那么对数据可的操作将会持久化,即便数据库出现故障也不会影响已经提交的事务。
三.数据库事务的隔离级别
1.ISOLATION_READ_UNCOMMITTED (读取未提交数据)
这是数据库的最低隔离级别,此隔离级别会出现(脏读,不可重复读,幻读,避免了 丢失更新)
2.ISOLATION_READ_COMMITTED (读取已提交数据)
保证了一个事务提交后的数据才能被另一个事务读取,另外一个事务不能读取该事务的未提交数据。会出现(不可重复读,幻读,避免了脏读,丢失更新)。SqlServer,Oracle默认使用。
3.ISOLATION_REPEATABLE_READ(可重复读)
保证了读取已经提交的数据,还保证可重复读取数据。会出现(幻读,避免了不可重复读,脏读,丢失更新)。MySql默认使用。
4.ISOLATION_SERIALIZABLE(串行化)
隔离级别最高,但是话费的代价也最高,事务被处理为顺序执行,避免了幻读,不可重复读,脏读,丢失更新。
丢失更新
当两个或多个事务选择同一行,选定最初值进行更新操作时,会发生丢失更新问题。比如事务A和事务B同时修改某个值0,事务A将值修改为1并提交,然后事务B不知到A存在,把0更新为2提交。此时A事务所做的更新操作将会丢失。解决办法:对要修改的行枷锁,只能并发发生一个事务。
脏读
一个事务读到另一个事务未提交的数据,比如事务A修改一个值,原始值为0,A将值修改为2,事务未提交;而事务B本应该读取的值为0,可是读到的确是2,如果是钱,悲催了!!!
不可重复读
一个事务中,多次读取同一数据,返回的结果有所不同,换句话说就是 后续读取可以读到前一个事务已经提交的更新数据,相反“可重复读”在同一事务中读取数据时,能够保证多次读取的通过数据一样,也就是读不到别的事务在本次读取事务中间提交的更新。
幻读
一个事务读取到了另一个事务已提交的insert数据,举个例子:当前事务对表中的所有行进行修改,此时事务还未提交,另一个事务插入了一条数据并提交,这时第一个事务读取表中的数据时发现有一条没有修改的数据,好像幻觉一般。
文章参考:http://elf8848.iteye.com/blog/345360
http://www.cnblogs.com/hustcat/archive/2009/10/18/1585626.html
http://blog.jobbole.com/24006/
- spring事务的传播属性,数据库事务特征,隔离级别
- Spring的事务传播属性,数据库的隔离级别
- Spring的事务传播属性,数据库的隔离级别
- Spring的事务传播属性,数据库的隔离级别
- spring的事务传播属性与数据库的隔离级别
- spring里面事务的传播属性和事务隔离级别
- spring里面事务的传播属性和事务隔离级别
- spring里面事务的传播属性和事务隔离级别
- spring里面事务的传播属性和事务隔离级别
- spring里面事务的传播属性和事务隔离级别
- spring里面事务的传播属性和事务隔离级别
- Spring事务隔离级别和事务的传播属性
- spring里面事务的传播属性和事务隔离级别
- spring里面事务的传播属性和事务隔离级别
- spring事务传播属性与隔离级别
- spring 事务隔离级别和传播属性
- spring事务传播属性和隔离级别
- Spring事务传播属性与隔离级别
- HttpURLConnection用法详解
- 关于ReadFile函数错误:代码6,ERROR_INVALID_HANDLE
- USACO
- codeforces 61E 树状数组 逆向
- unity 拖动物体移动
- spring事务的传播属性,数据库事务特征,隔离级别
- JAVA使用、配置相关基础知识
- 启动tomcat 总提示“Publishing to Tomcat v6.0 Server at localhost ...错误
- Python模块:bisect二分算法模块
- UEFI Application
- loss和accuracy的关系
- GitHub访问速度慢的解决方法
- python结合redis的部分操作
- No result defined for action result input