事务相关知识总结
事务相关知识总结
事务的4个特征
1.原子性(Atomicity):事务是最?的执?单位,不允许分割。即:要么都做,要么都不做。
2.一致性(Consistency):多个事务对同一数据读取结果是一致的。
3.隔离性(Isolation):并发访问时,一个用户的事务不被其他事务干扰,各自独立。
4.持久性(Durability):一个事务提交后,对数据库中事务改变是持久的,即使数据库出现故障也不会影响。
事务的4种隔离级别
注:Spring中在方法上用@Transactional(isolation = Isolation.READ_COMMITTED)进行设置
1.Read-uncommitted(读取未提交 ):最低的隔离级别,允许读取尚未提交的数据变更,会导致脏读、不可重复读、幻读
2.Read-committed(读取已提交):允许读取并发事务已经提交的数据,会导致不可重复读、幻读
3.Repeatable-read(可重复读):对同?字段的多次读取结果都是?致的,除?数据是被本身事务??所修改,会导致幻读
4.Serializable(可串行化):最?的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执?,这样事务之间就完全不可能产??扰
- 脏读(Dirty read): 当?个事务正在访问数据并且对数据进?了修改,?这种修改还没有提交到数据库中,这时另外?个事务也访问了这个数据,然后使?了这个数据。
- 丢失修改(Lost to modify): 指在?个事务读取?个数据时,另外?个事务也访问了该数据,那么在第?个事务中修改了这个数据后,第?个事务也修改了这个数据。
- 不可重复读(Unrepeatableread): 指在?个事务内多次读同?数据。在这个事务还没有结束时,另?个事务也访问该数据。那么,在第?个事务中的两次读数据之间,由于第?个事务的修改导致第?个事务两次读取的数据可能不太?样。这就发?了在?个事务内两次读到的数据是不?样的情况,因此称为不可重复读。强调修改数据。
- 幻读(Phantom read): 幻读与不可重复读类似。它发?在?个事务(T1)读取了??数据,接着另?个并发事务(T2)插?了?些数据时。在随后的查询中,第?个事务(T1)就会发现多了?些原本不存在的记录,就好像发?了幻觉?样,所以称为幻读。强调增加或删除数据。
Spring中事务的7个传播方式
注:Spring中在方法上用 @Transactional(propagation = Propagation.REQUIRED) 进行设置
1.Required:如果外层已经有事务存在,则会运行在当前(外层)事务中,否则会新开一个事务
2.Supports:如果外层存在事务就在外层事务中运行,不存在也不会创建事务
3.Mandatory:该方法必须外层有事务才能运行,否则报错
4.RequiresNew:是无论外层是否有事务,他都会新建事务,和外层事务无关
5.NotSupported:该方法不应该运行在事务中,如果当前存在事务,事务会被挂起,即相当于外层没加事务
6.Never:该方法不能运行在事务中,如果存在事务,抛异常
7.Nested:如果当前存在事务,则该方法会在嵌套事务中运行,该嵌套事务可以独立于当前事务进行提交回滚操作;如果当前不存在事务,会新开一个事务
具体含义可参考:
七种传播方式简述:
https://blog.csdn.net/LiuRenyou/article/details/93197263
Required/RequitedNew/Nested详解:
https://baijiahao.baidu.com/s?id=1593192556844228644&wfr=spider&for=pc
注:数据库事务与Spring事务关系: