【孙哥说Spring5】第四章 Spring中的事务属性(Transaction Attribute)

  1. 什么是事务属性
属性:描述物体特征的一系列值
	性别	身高	体重	...

事务属性:描述事务特征的一系列值
1. 隔离属性
2. 传播属性
3. 只读属性
4. 异常属性
  1. 如何添加事务属性
@Transactional(isolation=, propagation=, readOnly=, timeout=, rollbackFor=, noRollbackFor=,)
  1. 事务属性详解

(1)隔离属性(isolation)

  • 隔离属性的概念
概念:描述了事务解决并发问题的特征
1. 什么是并发
	多个事务(用户)在同一时间,访问操作了相同的数据
	同一时间:0.000几秒 微小前 微小后
3. 并发会产生哪些问题
	1. 脏读
	2. 不可重复读
	3. 幻影读
4. 并发问题如何解决
	通过隔离属性解决,隔离属性中设置不同的值,解决并发处理过程中的问题
  • 脏读
产生原因:
	一个事务,读取了另一个事务中没有提交的数据,会在本事务中产生数据不一致的问题
解决方案:
	@Transactional(isolation=Isolation.READ_COMMITTED)
  • 不可重复读
产生原因:
	一个事务中,多次读取相同的数据,但是读取结果不一样,会在本事务中产生数据不一致的问题
注意:
	1. 不是脏读
	2. 是在一个事务中
解决方案:
	@Transactional(isolation=Isolation.REPEATABLE_READ)
本质:
	加了一把行锁
  • 幻影读
产生原因:
	一个事务中,多次对整表进行查询统计,但是结果不一样,会在本事务中产生数据不一致的问题
解决方案:
	@Transactional(isolation=Isolation.SERIALIZABLE)
本质:
	加了一个表锁
  • 总结
并发安全:
	SERIALIZABLE > REPEATABLE_READ > READ_COMMITTED
运行效率:
	READ_COMMITTED > REPEATABLE_READ > SERIALIZABLE 
  • 默认的隔离属性
  1. sd
  2. sd
  3. sd

你可能感兴趣的:(孙哥说Spring5,spring)