什么是事务?
-事务是指为了实现特定的功能,对数据库所进行一组完整的逻辑操作,这组操作要么全部成功,要么全部失败。
什么是事务的四大特性?
- 原子性 原子性这组操作是不可分割的最小单位,要么全部成功,要么全部失败。**
- 隔离性 当一个事务进行操作的时候,其他事务不可以进行操作,这就是事务的隔离性。**
- 一致性 事务回滚之后,数据和操作前保持一致。**
- 持久性 一个事务一旦被提交,它对数据库的改变就是永久的。**
针对事务,spring为我们提供了那些接口?
三大接口,分别是:
- PlatformTransactionManager 平台事务管理器
- TransactionDefinition 事务属性的定义
- TransactionStatus 事务运行时状态
具体执行的时候事务管理器(PlatformTransactionManager)会根据TransactionDefinition 给出的相关属性(隔离级别、传播行为、是否只读、超时时间)执行事务,执行事务的相关信息保存在TransactionStatus 里面。
PlatformTransactionManager只是为相关的实现类提供相关的接口。如果底层使用的是mybatis,那么实现类就是
DataSourceTransactionManeger;如果底层使用的是jpa,那么实现类就是JpaTransactionManeger。
什么是Spring事务的隔离级别?
Read uncommitted 读未提交 允许其他事务读取当前事务未提交的数据,有可能导致出现脏读问题。
Read committed读提交 允许其他事务对数据进行更新(UPDATE)操作,有可能会导致出现不可重复读问题。
Repeatable read重复读 就是在开始读取数据(事务开启)时,不再允许修改操作,允许插入INSERT操作,有可能导致幻读问题。
Serializable序列化 串行化顺序执行,相当于锁表。 最安全,但是效率低下。
什么是Spring事务的传播机制?
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务,最常见的选择。 有就有,没有就创建一个,必须要事务。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 没有就没有。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 没有就抛异常。
实现Spring事务有什么方式
编程式和声明式,声明式又分三种,最常用的就是使用注解@Transantional(propagation=Propagation.REQUIRED)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。