一、事务和四大特性
事务:指数据库的一个执行操作单元
事务的四个特性(ACID)
1.1 原子性
原子性(Atomicity):操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令之前的数据状态。
1.2 一致性
一致性(Consistency):事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
1.3 隔离性
隔离性(Isolation):是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即:要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
1.4 持久性
持久性(Durability):当事务正确完成后,它对于数据的改变时永久性的。
二、何为事务传播
1、事务指数据库的一个提交动作集合。(事务:开启 、提交/回滚)
2、事务传播,何为传播?一个传给谁?指的是多个嵌套事务之间的影响关系。
三、事务传播机制
1、传播流程图
2、在Spring的结合体现
Spring事务使用AOP的机制实现,会在@Transactional注解修饰的方法前后分别织入开启事务的逻辑,以及提交或回滚的逻辑。@Transactional可以修饰在方法或者类上,区别就在于修饰于类上的,会对该类下符合条件的方法(例如private修饰的方法就不符合条件)前后都织入事务的逻辑。
3、事务传播类型
基本均采用REQUIRED
四、何为事务隔离
1、隔离说明相互存在影响,不同事务对相同条件数据操作的时候,会产生数据的不一致性和完整性,就是这个事。
五、事务隔离级别
1、三种数据现象
脏读 | 读取未提交事务数据。未提交事务回滚导致你读取的数据是无效的。 |
不可重复读 | 同一事务下,重复读取同一条数据。在别的事务更新的情况影响下出现不一致。(update) |
幻读 | 数据一会有,一会没有了。主要强调数量的不一致(add和del |
2、隔离级别
如果是使用JDBC对数据库的事务设置隔离级别的话,也应该是在调用Connection对象的setAutoCommit(false)方法之前。调用Connection对象的setTransactionIsolation(level) mysql默认隔离级别 REPEATABLE-RED