事务

106 阅读2分钟

事务的概念

事务是数据库操作最基本单元,逻辑上,一组操作,要么都成功,要么都失败

四个特性(acid)

  1. 原子性:要么都成功,要么都失败
  2. 一致性:操作前与操作后,数据库仍然是完整的。比如A向B转账后,两人的总额没有改变
  3. 隔离性:两个事务不会互相影响
  4. 持久性:事务完成后,数据库也会同时更新

事务操作(底层使用AOP原理)

  1. 事务一般添加到Service层中
  2. 在Spring中进行事务管理操作,两种方式:编程式事务管理,声明式事务管理(使用这个)
  3. 声明式事务管理:注解方式,xml配置
  4. Spring事务管理API:提供一个接口,代表事务管理器 Transactional(事务传播行为)
  • 多事务方法直接调用,在这个过程中如何管理
  • 事务方法:对数据库表中的进行改变的操作
  • 在service类上添加注解@Transactional,可以配置相关参数
  • 7种传播行为 最常用两种(a方法调用b方法):
  1. REQUIRED:如果a方法本身有事务,调用b方法后,b方法使用当前a方法里面的事务;如果a中没有,会根据b中的创建新的事务
  2. REQUIRED_NEW:调用a方法调用b方法,不论a方法是否有事务,都会创建新的事务

20200704233319992.png

ioslation(事务隔离级别)

a. 不考虑隔离性产生的问题:脏读,不可重复读,幻读

脏读:一个未提交事务读取到另一个未提交事务的数据
不可重复读:一个未提交事务读取到另一提交事务修改的数据
幻读:一个未提交事务读取到另一提交事务添加的数据

b. 解决:通过设置事务隔离级别 mysql默认为Repeatable read 2019052019551758.png

@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)

timeout超过时间

  1. 事务需要在一定时间内进行提交,如果不提交进行回滚;默认值是-1(不超时),以秒为单位

readOnly是否只读

  1. 读:查询操作,写:添加修改删除操作
  2. readOnly默认值false,表示可以查询可以添加修改删除操作
  3. 设置readOnly值是true,只能查询

rollbackFor回滚

设置那些异常进行事务回滚

noRollbackFor不回滚

设置那些异常不进行事务回滚