你了解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相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
国内首个全域边缘节点服务发布,阿里云助力企业把握5G机遇
7月24日,阿里云峰会开发者大会在上海世博中心举办。作为2019年首场最受瞩目的云计算开发者大会,阿里云携一众云计算技术大牛与开发者面对面,探讨各自领域的技术干货与前沿趋势。同时,也发布了多项重大重磅新品与技术战略,其中国内首个全域覆盖的边缘计算基础设施产品备受瞩目。 边缘计算-5G时代的新型基础设施 据IDC估计,2020年将有超过500亿的终端与设备联网,而有50%的物联网网络将面临网络带宽的限制,40%的数据需要在网络边缘分析、处理与储存。边缘计算市场规模将超万亿,成为与云计算平分秋色的新兴市场。 不可否认,5G贡献了低延时和高可靠的网络,对边缘计算是一大利好。但是随之而来的大带宽业务激增和大规模数据爆发,也会给企业带来不小的挑战,传统的云、端二协同计算不足以支撑企业业务发展。所以,为了满足海量数据的超低延时的业务场景需求,5G通
- 下一篇
SpringBoot开发案例之Nacos注册中心管理
前言 在之前的 Dubbo 服务开发中,我们一般使用 Zookeeper 作为注册中心,同时还需要部署 Dubbo 监控中心和管理后台。 Nacos 注册中心 Nacos 是阿里巴巴的开源的项目,全称 Naming Configuration Service ,专注于服务发现和配置管理领域。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 生态图 如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如 Spring CloudApache Dubbo and Dubbo Mesh TODOKubernetes and CNCF TODO。使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。 Nacos Spring Boot 快速开始 <!-- Dubbo Nacos registry dependency --> <dependency> <groupId>co...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用