什么是事务
在数据库开发中,一组业务逻辑操作,要么全部成功,要么全部失败。
事务有什么特定?ACID
原子性:整体,原子不可分割的。整个操作被看成一个整体,要么成功,要么失败。
一致性:数据,事务操作的前后数据一致。
隔离性:并发,两个事务之间并发访问情况。
持久性:结果,事务一旦提交,不能回滚。
隔离有什么问题?
脏读:一个事务读到了另一个事务没有提交的数据。
不可重复读:一个事务读到了另一个事务已有提交的数据(update)。
幻读:一个事务读到了另一个事务已有提交的数据(insert)。
隔离级别有那些?
读未提交:存在3个问题(脏读、不可重复读、幻读)
读已提交:解决1个问题(脏读),存在2个问题(不可重复读、幻读)
可重复读:解决2个问题(脏读、不可重复读)、存在1个问题(幻读)
串行化:解决3个问题(脏读、不可重复读、幻读)–单事务
研究Spring事务,需要学习事务管理平台管理器:
PlatformTransactionManager
– 在平台管理器中,通过事务的定义获得事务,从而进行事务提交或回滚操作。
事务定义 TransactionDefinition 的详解:
传播行为:一个事务调用另一个事务,事务共享问题。
- PROPAGATION_REQUIRED,required:支持当前事务,如果没有事务,创建一个新的。
A 有事务,B使用A的事务。(支持当前事务)
A没有事务,B创建新的。() - PROPAGATION_SUPPORTS,supports:支持当前事务,如果没有事务,以非事务执行。
A 有事务,B使用A的事务。(支持当前事务)
A没有事务,B以非事务执行。 - PROPAGATION_MANDATORY,mandatory:支持当前事务,如果没有事务,抛异常
A 有事务,B使用A的事务。(支持当前事务)
A没有事务,B抛异常。 - PROPAGATION_REQUIRES_NEW,requires_new:创建一个新事物,如果当前有事务,将挂起。
A 有事务,B创建新事务,同时挂起A事务。
A 没有事务,B创建新事务。 - PROPAGATION_NOT_SUPPORTED, not_supported:不支持当前事务,以非事务执行,如果有挂起
A 有事务,B以非事务执行,同时挂起A事务。
A 没有事务,B以非事务执行。 - PROPAGATION_NEVER, never:不支持当前事务,如果有抛异常。
A 有事务,B抛异常
A 没有事务,B以非事务执行。 - PROPAGATION_NESTED, nested :嵌套事务,底层使用savepoint进行嵌套事务操作。
保存点允许回顾部分事务。



