Spring的事务

事务是确保数据库数据完整性和一致性的重要机制,具备原子性、一致性和持久性。隔离级别包括读取未提交、读取已提交、可重复读和串行化,分别解决脏读、不可重复读和幻读问题。不同的隔离级别在并发处理中有着不同的效果,选择合适的隔离级别对系统性能和数据安全性至关重要。
摘要由CSDN通过智能技术生成

事务

保证数据的完整行和一致性的技术,被事务管理的动作。

事务的四种特性

  • 原子性:要么都成功,要么都失败。
  • 一致性:事务开始之前和事务开始之后,数据都是完整的。
  • 持久性:事务开始后,所影响很长远。
  • 隔离性:多个事务会处理相同的数据,应该每个事务都会与其他事务相隔离,防止数据损坏。
    • 读取为提交:允许一个事务读取该事务为 提交的数据。
    • 读取已提交:A事务主要比B事务先处理完数据可以进行读取。(不可重复读)
    • 可重复读:A事务在开始读的时候,不允许其他事务进行修改。
    • 串行化:所有事务处理顺序化(每次读都需要获得标记共享锁)。

脏读、不可重复读、幻读

  • 脏读:一个事务读取到另一个事务未提交的更新数据。
  • 不可重复读:在同一个事务中多次读取同一个数据返回的结果有所不同,后续读取可以读到另一个事务已提交的更新数据,“可重复读”在同一事务中多次读取数据时,能够保证所读的数据一样,也就是后续读取到另一事务已提交的更新数据。
  • 幻读:查询表中一条数据如果不存在就插入一条,并发的时候会发现,里面有两条相同的数据。
隔离级别脏读不可重复读幻读
读取未提交可能可能可能
读取已提交不可能可能可能
可重复读不可能不可能可能
串行化不可能不可能不可能

本地事务 @Transactional

底层实现原理其实是AOP切面编程,来实现共享连接

什么情况下事务会失效?

  1. 数据库不支持事务会失效(例如mysql5.7版本及以前 使用的是MyIsAm存储引擎)。
  2. service类没有被Spring管理。(如果没有被管理,会变成Spring Bean)。
  3. 内部调用(不带事务的方法调用类中带事务的方法,不会回滚)。
  4. 使用默认的事务处理方式。默认对运行时异常进行回滚,可加上Rollbackfor进行指定。
  5. 事务只能用于public方法,如果在protected、private或者默认可见性的方法上面使用会被忽略,也不会抛出任何异常。
  6. 数据源没有配置事务管理器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值