《精通Spring4.x》事务管理

一、数据并发问题
当数据库中相同数据被多个事务同时访问时,就可能会出现并发问题。这些问题可以归结为5类,包括三类数据读问题,以及2类数据更新问题。
1、脏读
A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作。
在这里插入图片描述
2、不可重复读
不可重复读是指A事务读取了B事务已经提交的更改 数据。
在这里插入图片描述
3、幻像读
幻想读是指A事务读取B事务已经提交的新增 数据。
在这里插入图片描述
不可重复读和幻像读的区别为更新和插入

4、第一类丢失更新
A事务撤销时,把已经提交的B事务的更新数据覆盖了。
在这里插入图片描述
5、第二类丢失更新
A事务覆盖B事务已经提交的数据
在这里插入图片描述
二、数据库的锁机制
数据库通过锁机制解决并发访问的问题,不同的数据库在实现细节上存在差别,但基本原理是一样的。
按锁定的对象不同,一般可以分为行锁定和列锁定。按照锁定关系看,可以分为共享锁和独占锁。共享锁定会防止独占锁定,但会允许其他共享锁定。
以下为Oracle数据库常用的几种锁定。
行共享锁定:一般通过 SELECT FOR UPDATE语句隐士的获取行共享锁定。行共享锁定并不防止对数据进行更改操作,但是可以防止其他会话获取独占性数据表锁定。允许进行多个并发的行共享和行独占锁定,还允许进行数据表的或者采用共享行独占锁定。
行独占锁定:通过一条INSERT、UPDATE、或DELETE语句隐士获取。这种锁定可以防止其他会话获取一个共享锁定,共享行独占锁定或独占锁定
表共享锁定:通过LOCK TABLE IN SHARE MODE语句显示获得,这种锁定可以防止其他会话获取行独占锁定,或者防止其他表共享刚独占锁定或表独占锁定。但他允许在表中拥有多个行共享和表共享锁定。
表共享行独占锁定:通过 LOCK TABLE IN SHARE ROW EXCLUSIVE MODE语句显示获得。这种锁定可以防止其他会话获取一个表共享、行独占或者表独占锁定,但允许其他行共享锁定
表独占锁定:通过LOCK TABLE IN EXCLUSIVE MODE语句显示获得。这种锁定可以防止其他会话对该表的任何其他锁定
三、事务的隔离级别
在这里插入图片描述
三、Spring对事务管理的支持
事务的传播行为
在这里插入图片描述
使用XML配置声明式事务
在这里插入图片描述
< prop >内的值为事务属性信息,其配置格式如图。
在这里插入图片描述
·事务的隔离级别如下
在这里插入图片描述
在事务执行过程中发生异常,事务可以被声明为回滚或继续提交。当显示配置时,可以指定为正负号,正号时将提交,负号将会回滚。

基于aop/tx命名空间的配置
在这里插入图片描述
以下为tx:method元素属性表
在这里插入图片描述
使用注解配置事务
使用@Transactional注解,需要在XML文件中进行如下配置:
在这里插入图片描述
<tx:annotation > 还具有以下属性,proxy-target-class,如果为true,则使用创建子类来代理业务类,如果为false,则使用基于接口代理。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值