1.事务的传播行为
通俗的解释:
事务的传播行为:一个方法运行在一个开启了事务的方法中,当前方法是用原来的事务还是开启一个新的事务
1.案例说明:
Propagation.REQUIRED(默认,使用最外层的事务,事务内外饰一个整体,整体成功或整体失败)
Propagation.REQUIRED_NEW(挂起外面的事务,使用自己创建的事务,尽最大权力保证运行)
100块钱买2本书 A为50块 B为60块
如果使用Propagation.REQUIRED 则买不到任何一本书
如果使用Propagation.REQUIRED_NEW 则买到一本
2.图解
2.事务的隔离级别:
1)关于脏数据的集中术语解释:
脏读:当前事务其他事务未提交的数据
不可重复度:重复读取同一个数据,读取不一样的数据
幻读:读到新增数据,读取两次出现行数不一样
2.事务的隔离级别的种类
隔离级别的出现是为了解决上面几种脏数据的问题,但是是以牺牲数据库的效率为代价的
1.读未提交:不能解决所有问题,数据库效率最高 读最新未提交版本
2.读已提交:解决脏读问题(常用)读最新提交版本
3.可重复度:解决脏读、不可重复读问题 ;读行备份,读行同一版本
4.串行化:脏读、不可重复度、幻读;读表备份,读表同一版本
至于保证数据准确性的问题,需要搭配使用MVCC + 锁策略来完成
3.数据库对于事务隔离级别的支持
设置事务的隔离隔离级别:
设置事务级别为可重复度
1.开启事务A并读取数据 为Book1的价格 60
2.开启事务B并读取数据,将Book1的价格修改为600,并提交
3.事务A再次读取Book1的价格,仍然为60
设置事务级别为读已提交
1.开启事务A并读取数据 为Book1的价格 60
2.开启事务B并读取数据,将Book1的价格修改为600,并提交
3.事务A再次读取Book1的价格,仍然为600