当前位置: 首页 > news >正文

MySql并发事务问题

 事务


事务概念:

        事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

事务的特性:ACID:

小结:

ACID,分别指的是:原子性、一致性、隔离 性、持久性;

举个例子:

A向B转账500,转账成功,A扣除500元,B增加500元,原子操作体现在要么都成功,要么都失败

在转账的过程中,数据要一致,A扣除了500,B必须增加500

在转账的过程中,隔离性体现在A像B转账,不能受其他事务干扰

在转账的过程中,持久性体现在事务提交后,要把数据持久化(可以说是落盘操作)

并发事务问题

并发事务概念:

并发事务是指在数据库系统中,多个事务同时对数据进行读写和修改的过程。

并发事务问题:

1.脏读 (违反了事务的隔离性)

例:事务A先查询id为1的数据,再修改id为1的数据。修改完以后事务A还没提交,这时候事务B也来查询id为1的数据,但这时候事务B已经可以读到A修改完的数据了。这就是脏读。(如果A事务回滚,但B已经读到了A修改的数据,造成了数据不一致)

2.不可重复读 (违反了事务的一致性)

例:事务A先查询id为1的数据,再执行某个逻辑。这时事务B修改id为1的数据。事务A再去查询id为1的数据,却和之前不一样了!简单来说就是:在同一个事务内,查询两次同一条数据,却出现不同结果!

3.幻读 (违反了事务的隔离性)(在已经解决了不可重复读的基础上)

例:事务A查询id为1的数据,发现数据库中没有。这个时候事务B来了,正好往数据库中插入了一条id为1的数据并且提交了事务。这个时候,事务A进行插入操作,就直接报错了:里面已经有了id为1的数据(假设我们已经解决了不可重复读的问题)。但A再次进行查询,查询结果和第一次一样,发现还是没有id为1的数据,但插入就是报错,这就是幻读的问题。

注意:幻读是在解决了不可重复读的基础上,不可重复读是读取了其他事务更改的数据,针对update操作;幻读是读取了其他事务新增的数据,针对insert和delete操作。

解决方案:

注:这里✔表示存在该问题,× 表示解决该问题。

小结

1.事务并发问题:

        第一是脏读, 当一个事务正在访问数据并且对数据进行了修改,而这种修改 还没有提交到数据库中,这时另外一个事务也访问了这个数据,因为这个数 据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依 据“脏数据”所做的操作可能是不正确的。

        第二是不可重复读:比如在一个事务内多次读同一数据。在这个事务还没有 结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之 间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。 这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重 复读。

         第三是幻读(Phantom read):幻读与不可重复读类似。它发生在一个事务 (T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在 随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就 好像发生了幻觉一样,所以称为幻读。

2.事务隔离:

        第一个是,未提交读(read uncommitted)它解决不了刚才提出的所有问 题,一般项目中也不用这个。

        第二个是读已提交(read committed)它能解 决脏读的问题的,但是解决不了不可重复读和幻读。

        第三个是可重复读 (repeatable read)它能解决脏读和不可重复读,但是解决不了幻读,这个 也是mysql默认的隔离级别。

        第四个是串行化(serializable)它可以解决刚 才提出来的所有问题,但是由于让是事务串行执行的,性能比较低。所以, 我们一般使用的都是mysql默认的隔离级别:可重复读。

相关文章:

MySql并发事务问题

事务 事务概念: 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务的特性:ACID: 小…...

Windows下Docker创建Mysql5.7

安装 下载镜像,注意,要带版本号 docker pull mysql:5.7 等下载完成执行命令: 错误命令1,直接Windows下路径: docker run --name mysql57 --restartalways -p 3306:3306 -v F:/mysqldata/data57/log:/var/log/mysql…...

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…...

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法: 现象:如果没进入对应的分支,输出为默认值 正常写法: 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象:统计出来的耗时是2000ms 正常写法&a…...

docker容器环境安装记录(MAC M1)(完善中)

0、背景 在MAC M1中搭建商城项目环境时,采用docker统一管理开发工具,期间碰到了许多环境安装问题,做个总结。 1、安装redis 在宿主机新建redis.conf文件运行创建容器命令,进行容器创建、端口映射、文件挂载、以指定配置文件启动…...

Linux 常用命令(持续更新中...)

1. ls 查看文件列表命令 语法: ls [-a -l -h] [Linux路径] -a -l -h 是可选的选项 (-h需配合-l命令一起使用)Linux路径是此命令可选的参数 ls #查看当前目录所有非隐藏文件(平铺方式显示) ls -a #查看当前目录下所有文件 …...

xss.pwnfunction-Jefff

在eval中可以直接执行命令所以直接把"直接闭合在结尾再加上一个"因为后面的"没闭和会报错 ?jeffa";alert(1);" 或 ?jeffa"-alert(1)-" -是分隔符...

java——文件上传

一、文件上传——简介 文件上传的简介:文件上传是指将本地计算机中的文件传输到网络上的服务器或另一台计算机上的过程。在 Web 开发中,文件上传通常指的是将用户通过 Web 页面提交的文件(如图像、文档、音频、视频等)传输到服务器…...

RCE(远程命令执行)漏洞详解

漏洞描述 RCE(remote command/code execute,远程命令执行)漏洞 远程代码执行 (RCE) 攻击是指攻击者可以在一个组织的计算机或网络上运行恶意代码。执行攻击者控制的代码的能力可用于各种目的,包括部署额外的恶意软件或窃取敏感数据。 漏洞原理 远程代…...

K8S - Deployment 的版本回滚

当前状态 先看deployment rootk8s-master:~# kubectl get deploy -o wide --show-labels NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES …...

53 v-bind 和 v-model 的实现和区别

前言 这个主要的来源是 偶尔的情况下 出现的问题 就比如是 el-select 中选择组件之后, 视图不回显, 然后 model 不更新等等 这个 其实就是 vue 中 视图 -> 模型 的数据同步, 我们通常意义上的处理一般是通过 模型 -> 数据 的数据同步, 比如 我们代码里面更新了 model.…...

VMware-16.0配置虚拟机网络模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么要配置网络?二、配置步骤1.检查VMware服务2.进入配置页面3.添加网络模式1.Bridge2.NAT3.Host-only 4.DHCP租约5.静态IP 三、使用总结 前言…...

element-ui badge 组件源码分享

今日简单分享 badge 组件的源码实现,主要从以下两个方面: 1、badge 组件页面结构 2、badge 组件属性 一、badge 组件页面结构 二、badge 组件属性 补充几个标签的用途: sub:下标、sup:上标、var 变量 代码如下&am…...

MySQL中日期有关函数

本次记录了获取日期时间的多种方式,还有日期和字符串之间的转换,以及加减日期的操作。 获取时间 # 1.获取当前时间(年月日时分秒格式) select now();# 2.获取当前时间(年月日格式) select curdate();# 3.获取当前时间(时分秒格式) select curtime();# 4.…...

jdbc工具类

jdbc 工具类,具体见下面代码,直接可以用。 /*** version 1.0* descpription: jdbc工具类* date 2024/4/6*/ public class JDBCUtils {private static final String URL "jdbc:mysql://127.0.0.1:3306/mybatis";private static final String …...

Svelte Web 框架介绍

Svelte 是一个用于构建网络应用程序的现代框架,它与其他用户界面框架(如React和Vue)有着本质的不同。Svelte 的核心理念是在构建应用程序时,将大部分工作转移到编译步骤中,而不是在用户的浏览器中运行时处理。这种方法…...

IP地址获取不到的原因是什么?

在数字化时代的今天,互联网已成为我们日常生活和工作中不可或缺的一部分。而IP地址,作为互联网通信的基础,其重要性不言而喻。然而,有时我们可能会遇到IP地址获取不到的问题,这会给我们的网络使用带来诸多不便。那么&a…...

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解&#xff…...

蓝桥杯真题Day47 倒计时6天:6道真题+回溯递归问题

[蓝桥杯 2019 省 A] 糖果 题目描述 糖果店的老板一共有M种口味的糖果出售。为了方便描述,我们将M 种口味编号 1∼ M。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而是K 颗一包整包出售。 幸好糖果包装上注明了其中 K 颗糖果的口味…...

通过UDP实现参数配置

来讲讲UDP的一种常见应用 我们知道UDP是一种无连接的网络传输协议,在发送数据时指定目标IP及端口就可以将数据发送出去,因此特别适合用作网络设备发现。 我们可以自定义一个通信端口,假设为55555。我们再制定一个协议用于查询目标设备&#x…...

解析Apache Kafka:在大数据体系中的基本概念和核心组件

关联阅读博客文章:探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章:深入解析大数据体系中的ETL工作原理及常见组件 关联阅读博客文章:深度剖析:计算机集群在大数据体系中的关键角色和技术要点 关联阅读博客文章&a…...

独角数卡对接码支付收款教程

1、到码支付后台找到支付配置。2、将上面的复制依次填入,具体看下图,随后点立即添加 商户ID商户PID 商户KEY异步不能为空 商户密钥商户密钥...

vuepress-theme-hope 添加谷歌统计代码

最近做了个网站,从 cloudflare 来看访问量,过去 30 天访问量竟然有 1.32k 给我整懵逼了,我寻思不应该呀,毕竟这个网站内容还在慢慢补充中,也没告诉别人,怎么就这么多访问?搜索了下, cloudflare 还会把爬虫的请求也就算进来,所以数据相对来说就不是很准确 想到了把 Google An…...

LabVIEW太赫兹波扫描成像系统

LabVIEW太赫兹波扫描成像系统 随着科技的不断发展,太赫兹波成像技术因其非电离性、高穿透性和高分辨率等特点,在生物医学、材料质量无损检测以及公共安全等领域得到了广泛的应用。然而,在实际操作中,封闭性较高的信号采集软件限制…...

什么是stable diffusion?

🌟 Stable Diffusion:一种深度学习文本到图像生成模型 🌟 Stable Diffusion是2022年发布的深度学习文本到图像生成模型,主要用于根据文本的描述产生详细图像。它还可以应用于其他任务,如内补绘制、外补绘制&#xff0…...

KeyguardClockSwitch的父类

KeyguardClockSwitch 定义在KeyguardStatusView中, mClockView findViewById(R.id.keyguard_clock_container);KeyguardClockSwitch的父类为: Class Name: LinearLayout Class Name: KeyguardStatusView Class Name: NotificationPanelView Class Name: Notificat…...

Gradle系列(二):Groovy基础

Gradle系列(二):Groovy基础 本篇文章继续讲下Groovy一些基础的语法。 1:Map map与List的用法很像,只不过值是一个K:V的键值对。 下面是是Groovy中Map的定义: task testMap { def map [‘width’:1280,‘height’:1960] prin…...

PW1503限流芯片:可达3A限流,保障USB电源管理安全高效

在电源管理领域,开关的性能直接关系到设备的稳定性和安全性。今天,我们将详细解析一款备受关注的超低RDS(ON)开关——PW1503。它不仅具有可编程的电流限制功能,还集成了多项保护机制,为各类电子设备提供了高…...

深挖苹果Find My技术,伦茨科技ST17H6x芯片赋予产品功能

苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch,如今的Find My已经不单单可以查找苹果的设备,随着第三方设备的加入,将丰富Find My Network的版图。产…...

Web3 革命:揭示区块链技术的全新应用

随着数字化时代的不断发展,区块链技术作为一项颠覆性的创新正在改变着我们的世界。而在这一技术的进步中,Web3正逐渐崭露头角,为区块链技术的应用带来了全新的可能性。本文将探讨Web3革命所揭示的区块链技术全新应用,并展望其未来…...

广西建设职业学院官网网站/百度深圳总部

git bash的简单设置,使用ls命令时,可以显示中文。 命令:alias lsls --show-control-chars --colorauto 说明:alias,别名。功能非常强大,可以把复杂的操作设置一个别名,然后就可以非常方便的使用此操作了。…...

有专门学做衣服网站有哪些/seo优化的方法

先前知识: 1.Java对数组进行初始化时,该数组所占的内存空间,数组长度都是不可变的 2.创建一个字符串,为字符串对象分配内存空间,会耗费掉一定的时间和空间代价(CPU,内存)&#xff0…...

怎样做卖活网站/优惠活动推广文案

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。Git 与 SVN,CVS等其它版本控制系统最核心的区别:Git 是分布式的首先在官网上下载:https://git-scm.com/downloads,目前最新的版本是…...

农八师建设兵团社保网站/厦门seo网络推广

Parameter xxx not found. Available parameters are [...] 1.Dao.java中 方法传入参数字段前添加Param("xxx") 2.注意!!! Param的包别导错了 ---import org.apache.ibatis.annotations.Param; 千万别导入spring的。。转载于:htt…...

公司网站建设制作全包/网络推广最好的网站有哪些

来自:Spencers Blog链接:https://url.cn/5vvFpDa不废话,放脚本:find . -maxdepth 3 -name .git -type d | rev | cut -c 6- | rev | xargs -I {} git -C {} pull更为方便的,直接将这部分加入你的 .zshrc 或者 .bash_pr…...

重庆比较好的广告公司/网站优化seo方案

本文目录 1.Yarn 基础架构2.Yarn工作机制Ⅰ.流程说明3.Yarn工作机制高清大图4.Yarn调度器和调度算法 (仅做了解即可)Ⅰ.FIFO调度器Ⅱ.容量调度器(Capacity Scheduler)1.特点2.资源分配算法Ⅲ.公平调度器(Fair Scheduler)1.缺额情况2.队列资源分配方式在大数据开发中,小则几…...