spring事务的简单了解(4种事务特性,5种隔离级别,7种传播行为)

spring事务

1、什么是事务?
事务就是被捆绑在一起作为一个逻辑工作单元的sql语句分组,如果任何一个语句操作失败那么整个操作就会失败,以后操作就会回滚到操作前状态,或者是上个节点。为了确保数据库的正确性,要么同时执行,要么同时不执行,就可以使用事务。

2、事务的特点(ACID):
原子性:事务是一个不可分割的单位,要么都发生,要么都不发生。
一致性:事务执行前后数据的完整性必须保持一致。
隔离性:多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务干扰。多个并发事务的数据相互隔离。
持久性:事务一旦被提交后,数据就会被持久化到数据库中。

3、(1)spring的事务是使用aop实现的,而aop是使用动态代理实现的。
(2)spring的事务是在业务逻辑层(service)管理的
在业务逻辑开始的时候加上事务,有异常回滚;没有异常提交,最后释放资源

4、(1)事务隔离级别的设置是为了解决脏读,不可重复读,幻读等问题的。
脏读:一个事务a读取了另一个事务b改写还未提交的数据,如果另一个事务b回滚,事务a读取到的数据是无效的。

不可重复读:在同一个事务中,多次读取同一数据读取到的结果不同。比如事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

幻读:一个事务读取了几行数据后,另一个事务插入了新的数据后,幻读就发生了。再后来的查询中,第一个事务就会发现一些原来没有的数据。
总结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。

(2)解决读问题: 设置事务隔离级别(5种)
在这里插入图片描述
DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
未提交读(read uncommited) :脏读,不可重复读,幻读都有可能发生
已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生
可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生.
串行化的 (serializable) :避免以上所有读问题.
Mysql 默认:可重复读
Oracle 默认:读已提交

5、事务的传播行为(7种)
PROPAGION_XXX :事务的传播行为
+保证同一个事务中
PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常
+保证没有在同一个事务中
PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值