本文目录:
什么是事务
事务就是一次不可再分的操作
事务的四大特性是什么
原子性
一次不可再分的操作,事务中包含的操作 要成功都成功,要失败都失败
隔离性
一个事务不能被另外一个事务 干扰
持久性
事务的提交,对那么数据的操作就是永久性的
一致性
事务对数据的改变必须是从一个一致状态到另一个一致状态的改变
事务的隔离级别
读取已提交数据
会出现不可重复读和幻读
读取未提交数据
会出现脏读,不可重复读(基本不再使用)
可重复读(默认为可重复读)
会出现幻读
串行化
事务的并发状态下会出现哪些问题
脏读
一个事务读到另一个事务未提交更新的数据
例:[B事务提交数据 ,A事务查询,B事务回滚 A事务再次查询 A事务发现两次查询结果不一致]
幻读
一个事务读取到另一个事务已提交的 插入/删除的数据
例:[A事务查询,B事务插入或者删除,A事务再次查询 发现两次查询的数据结果不一致]
不可写重复读
一个事务读取到另一个事务已提交的更新数据
例:[A事务查询,B事务更新,A事务再次查询 发现两次查询结果不一致]
丢失更新
一个事务的撤销把其他事务的更新提交数据覆盖掉
例:[A事务更新数据,B事务在A事务后也去更新数据该数据,A事务回滚,然后把B事务更新的数据也回滚掉了]
覆盖更新
一个事物的提交把其他事务已提交更新数据覆盖掉
例:[A事务更新, B事务也去对该条数据更新,A事务发现自己更新的数据被覆盖掉了]
在spring中一些关于事务的知识点
在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 没有声明事务,那就不用事务.