Spring事务与MySQL数据库隔离级别的关系,方便记忆的Spring事务传播特性

一、MySQL数据库存在的3种读取问题

脏读:一个事务有可能读取了另一个事务改写但没提交的数据,如果回滚,那读取的就是无效数据

不可重复读:在同一个事务中,多次读取同一数据时,返回的结果却不相同;后续读取可能读取到另一个事务提交的更新数据

幻读:一个事务读取几行记录后,另一个事务有插入了几行记录,在后来的查询中,第一个事务就会发现原来没有的记录

二、Spring事务与MySQL数据库隔离级别的关系

Spring事务是基于数据库隔离级别的封装

4种隔离级别,解决3种读取问题,高并发为了下保证ACID,性能会大打折扣
在这里插入图片描述

三、Spring事务的传播特性(方便记忆)

支持
	required	如果当前没有事务,就新建一个;如果当前存在,就加入当前事务
	supports	支持当前事务,如果不存在,就不使用事务
	mandatory	支持当前事务,如果不存在则抛出异常
	
不支持
	requires_new	如果有事务存在,挂起当前事务,创建一个新的事务
	not_supported	以非事务方式运行,如果事务存在,挂起当前事务
	never	以非事务方式运行,如果事务存在,抛出异常
	
嵌套
	nested	如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则执行required类似操作

四、 事务的4个基本特性:ACID(附加)

原子性(Atomicity):事务是一个原子操作,由一系列动作组成;事务的原子性确保动作要么全部完成,要么完全不起作用

一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败;在现实中的数据不应该被破坏

隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏

持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来;通常情况下,事务的结果被写到持久化存储器中

猜你喜欢

转载自blog.csdn.net/loulanyue_/article/details/106181665