-
什么是事务
- 事务就是一次不可再分的操作
-
事务的四大特性是什么
-
原子性
- 一次不可再分的操作,事务中包含的操作 要成功都成功,要失败都失败
-
隔离性
- 一个事务不能被另外一个事务 干扰
-
持久性
- 事务的提交,对那么数据的操作就是永久性的
-
一致性
- 事务对数据的改变必须是从一个一致状态到另一个一致状态的改变
-
-
事务的隔离级别
-
读取已提交数据
-
会出现不可重复读和幻读
-
-
读取未提交数据
-
会出现脏读,不可重复读(基本不再使用)
-
-
可重复读(默认为可重复读)
- 会出现幻读
-
串行化
-
-
事务的并发状态下会出现哪些问题
-
脏读
-
一个事务读到另一个事务未提交更新的数据
-
[B事务提交数据 ,A事务查询,B事务回滚 A事务再次查询 A事务发现两次查询结果不一致]
-
-
-
幻读
-
一个事务读取到另一个事务已提交的 插入/删除的数据
-
[A事务查询,B事务插入或者删除,A事务再次查询 发现两次查询的数据结果不一致]
-
-
-
不可写重复读
-
一个事务读取到另一个事务已提交的更新数据
-
[A事务查询,B事务更新,A事务再次查询 发现两次查询结果不一致]
-
-
-
丢失更新
-
一个事务的撤销把其他事务的更新提交数据覆盖掉
-
[A事务更新数据,B事务在A事务后也去更新数据该数据,A事务回滚,然后把B事务更新的数据也回滚掉了]
-
-
-
覆盖更新
-
一个事物的提交把其他事务已提交更新数据覆盖掉
-
[A事务更新, B事务也去对该条数据更新,A事务发现自己更新的数据被覆盖掉了]
-
-
-
-
在Spring中事务有哪些传播行为
-
Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没 有的话新建一个(默认情况下)
- @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启
事务 - @Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事务,都创建
一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务 - @Transactional(propagation=Propagation.MANDATORY) :必须在一个已有的事务中执
行,否则抛出异常 - @Transactional(propagation=Propagation.NEVER) :必须在一个没有的事务中执行,否则
抛出异常(与 Propagation.MANDATORY 相反) - @Transactional(propagation=Propagation.SUPPORTS) :如果其他 bean 调用这个方法,
在其他 bean 中声明事务,那就用事务.如果其他 bean 没有声明事务,那就不用事务.
-