你了解Spring事物控制特性吗

简介: 一.事务特性原子性:强调事务的不可分割一致性:强调的是事务的执行的前后,数据的完整性要保持一致隔离性:一个事务的执行不应该受到其他事务的干扰持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库二.如果不考虑隔离性,会引发一些安全性问题读问题脏读:一个事务读到另一个事务还没有提交的数据不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询数据不一致虚读/幻读:一个事务读到另一个事务已经insert数据,导致当前事务中多次查询结果不一致写问题引发两类丢失更新三.解决引发的读问题设置事务的隔离级别read uncommitted :未提交读。

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

二.如果不考虑隔离性,会引发一些安全性问题
读问题
脏读:一个事务读到另一个事务还没有提交的数据
不可重复读:一个事务读到了另一个事务已经提交的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相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~

相关文章
|
7月前
|
Java 数据库 Spring
Spring事务的传播机制(行为、特性)
Spring事务的传播机制(行为、特性)
128 0
|
7月前
|
存储 监控 Java
|
7月前
|
JSON Dubbo Java
微服务框架(二十)Dubbo Spring Boot 生产就绪特性
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Dubbo Spring Boot 生产就绪特性
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
48 4
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
38 0
|
4月前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
45 1
|
7月前
|
设计模式 前端开发 Java
玩转Spring—Spring5新特性之Reactive响应式编程实战
玩转Spring—Spring5新特性之Reactive响应式编程实战
232 0
|
7月前
|
XML 监控 安全
Spring特性之一——AOP面向切面编程
Spring特性之一——AOP面向切面编程
79 1
|
3月前
|
安全 Java 开发者
强大!Spring Cloud Gateway新特性及高级开发技巧
在微服务架构日益盛行的今天,网关作为微服务架构中的关键组件,承担着路由、安全、监控、限流等多重职责。Spring Cloud Gateway作为新一代的微服务网关,凭借其基于Spring Framework 5、Project Reactor和Spring Boot 2.0的强大技术栈,正逐步成为业界的主流选择。本文将深入探讨Spring Cloud Gateway的新特性及高级开发技巧,助力开发者更好地掌握这一强大的网关工具。
246 6
|
4月前
|
存储 Java 开发者
使用Spring Boot 3.3全新特性CDS,启动速度狂飙100%!
【8月更文挑战第30天】在快速迭代的软件开发周期中,应用的启动速度是开发者不可忽视的一个重要指标。它不仅影响着开发效率,还直接关系到用户体验。随着Spring Boot 3.3的发布,其中引入的Class Data Sharing(CDS)技术为应用的启动速度带来了革命性的提升。本文将围绕这一全新特性,深入探讨其原理、使用方法以及带来的实际效益,为开发者们带来一场技术盛宴。
228 2