事务相关知识总结
事务相关知识总结
事务的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事务关系:https://www.cnblogs.com/leijiangtao/p/11911774.html

浙公网安备 33010602011771号