你了解Spring事物控制特性吗

一.事务特性
原子性:强调事务的不可分割
一致性:强调的是事务的执行的前后,数据的完整性要保持一致
隔离性:一个事务的执行不应该受到其他事务的干扰
持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库

二.如果不考虑隔离性,会引发一些安全性问题
读问题
脏读:一个事务读到另一个事务还没有提交的数据
不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询数据不一致
虚读/幻读:一个事务读到另一个事务已经insert数据,导致当前事务中多次查询结果不一致

写问题
引发两类丢失更新

三.解决引发的读问题
设置事务的隔离级别
read uncommitted :未提交读。脏读,不可重复读,虚读都可能发生
read committed :已提交读。避免脏读,不可重复读和虚度有可能发生
repeatable read :可重复读。避免脏读和不可重复读,虚读可能发生
serializable :串行化的。避免脏读,不可重复读,虚读的发生

select @@tx_isolation; 查看隔离级别
set session transaction isolation level 级别; 设置隔离级别

四.演示读问题
演示脏读
分别开启两个dos窗口 A.B
先查看两个窗口的隔离级别 select @@tx_isolation;
设置A窗口的隔离级别为未提交读 set session transaction isolation level read uncommitted;
分别在两个窗口开启事务 start transaction;
分别开启两个dos窗口 A.B
update account set money = money - 1000 where name = ‘张森’;
update account set money = money + 1000 where name = ‘凤姐’;
在A窗口查询数据 select * from account; – A事务读到了B事务还没有提交的数据;

演示避免脏读,演示不可重复读发送
分别开两个窗口,A.B
设置A窗口的隔离级别:read committed set session transaction isolation level read committed;
分别在两个窗口开启事务 start transaction;
在B窗口完成转账
update account set money = money - 1000 where name = ‘张森’;
update account set money = money + 1000 where name = ‘凤姐’;
在A窗口进行查询 select * from account; – 避免脏读
在B窗口提交事务 commit;
在A窗口中再次查询 select * from account; – 转账成功.(不可重复读:一个事务读到另一个事务中已经提交的update的数据,导致多次查询结果不一致.)

避免脏读和不可重复读,演示虚读
分别开启两个窗口,A.B
设置A窗口的隔离级别:repeatable read set session transaction isolation level repeatable read;
分别在两个窗口中开启事务 start transaction;
在B窗口完成转账的操作
update account set money = money - 1000 where name = ‘张森’;
update account set money = money + 1000 where name = ‘凤姐’;
在A窗口查询 select * from account; – 转账没有成功:避免脏读.
在B窗口提交事务 commit;
在A窗口再次查询 select * from account; – 转账没有成功:避免不可重复读.

避免虚读
分别开启两个窗口,A.B
设置A窗口的隔离级别:repeatable read set session transaction isolation level repeatable read;
分别在两个窗口中开启事务 start transaction;
在B窗口完成插入操作 insert into account values (null,‘王老师’,10000);
在A中进行查询操作 select * from account; – 没有查询到任何结果
在B窗口提交事务 commit; – A窗口马上就会显示数据

喜欢这篇文章的可以给笔者点个赞同,关注一下,每天都会分享Java相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/710661

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。