事务的概念
事务是数据库操作最基本单元,逻辑上,一组操作,要么都成功,要么都失败
四个特性(acid)
- 原子性:要么都成功,要么都失败
- 一致性:操作前与操作后,数据库仍然是完整的。比如A向B转账后,两人的总额没有改变
- 隔离性:两个事务不会互相影响
- 持久性:事务完成后,数据库也会同时更新
事务操作(底层使用AOP原理)
- 事务一般添加到Service层中
- 在Spring中进行事务管理操作,两种方式:编程式事务管理,声明式事务管理(使用这个)
- 声明式事务管理:注解方式,xml配置
- Spring事务管理API:提供一个接口,代表事务管理器 Transactional(事务传播行为)
- 多事务方法直接调用,在这个过程中如何管理
- 事务方法:对数据库表中的进行改变的操作
- 在service类上添加注解@Transactional,可以配置相关参数
- 7种传播行为 最常用两种(a方法调用b方法):
- REQUIRED:如果a方法本身有事务,调用b方法后,b方法使用当前a方法里面的事务;如果a中没有,会根据b中的创建新的事务
- REQUIRED_NEW:调用a方法调用b方法,不论a方法是否有事务,都会创建新的事务
ioslation(事务隔离级别)
a. 不考虑隔离性产生的问题:脏读,不可重复读,幻读
脏读:一个未提交事务读取到另一个未提交事务的数据
不可重复读:一个未提交事务读取到另一提交事务修改的数据
幻读:一个未提交事务读取到另一提交事务添加的数据
b. 解决:通过设置事务隔离级别
mysql默认为Repeatable read
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)
timeout超过时间
- 事务需要在一定时间内进行提交,如果不提交进行回滚;默认值是-1(不超时),以秒为单位
readOnly是否只读
- 读:查询操作,写:添加修改删除操作
- readOnly默认值false,表示可以查询可以添加修改删除操作
- 设置readOnly值是true,只能查询
rollbackFor回滚
设置那些异常进行事务回滚
noRollbackFor不回滚
设置那些异常不进行事务回滚