MySQL事务(基础入门)(高频考点)

文章目录

  • 前言
  • 什么是事务?
  • 事务的特性
  • 并发情况下会出现哪些问题
    • 脏读
    • 不可重复读
    • 幻读
  • 总结


前言

今天来讲一讲 MySQL 事务的基础入门。

更多关于MySQL的知识可以看此专栏 MySQL专栏(持续更新)


什么是事务?

当我们在操作数据库的时候,有时候是一条SQL语句,有时候需要多条SQL语句,当一个业务功能需要多条SQL语句执行时,这就涉及到事务的观念了。

事务:多条SQL语句要么全部执行成功,要么全部执行失败。

我们来看一个经典的转账的案例,同学A余额有100万,同学B余额有50万。此时同学 A 想转账 50 万给同学 B。具体操作如下:

  1. 同学A的余额减去50万
  2. 同学B的余额加50万

以上涉及三条SQL语句吧。如果没有事务的情况下,当执行完 1(同学A的余额减去50万) 的步骤时,网络掉了,客户端连接不上MySQL了,需要重启MySQL。那么这时候同学 A已经减去了 50万,同学 B 却还没加 50 万,50 万消失了。这同学 A 血亏。

而如果有事务的情况下,当执行完 1(同学A的余额减去50万) 然后断开服务时,我们的事务会回滚,也就是转账失败,都没有执行成功,同学 A 没有减去 50 万。同学 B 的余额也没加 50 万。

事务的特性

A,Atomicity,原子性:一个事务中的所有操作,要么全部执行成功,要么全部执行失败。不会只执行到中间。例如上述的转账的具体操作:1. 同学A的余额减去50万 2. 同学B的余额加50万。要么全部执行,要么全部不执行。不会只执行一句。

C,Consistency,一致性:指无论是操作前,还是操作后,数据都是保持一致性的状态。数据满足完整性的约束。比如上述中的案例,不会出现 50 万消失了的状态。

I,Isolation,隔离性:指各个不同的事务在执行的过程中互不影响,互不约束。数据库允许多个并发事务同时对其数据进行读写和修改的能力。

D,Durability,持久性:事务处理结束后,修改的数据是永久的,即使系统故障也不会改变。

MySQL 中 Innndb 是支持事务的,之前的存储引擎 MyLSAM 是不支持事务的。
不了解存储引擎的可以看这篇 MySQL 的存储引擎

InnoDB 引擎是通过什么技术保持事务的特性呢?

  • 持久性:通过 redo log
  • 原子性:通过 undo log
  • 隔离性:通过 MVCC 机制或锁机制

持久性 + 原子性 + 隔离性 的目的是为了实现一致性。

并发情况下会出现哪些问题

脏读

脏读:读到未提交事务的数据。

如下,初始条件:最初的余额为 100 万。
在这里插入图片描述
同学 B 两次读到的数据不同,第一次读到的 50 万是同学A未提交的事务。这是不正确的数据,读到未提交事务的数据就是脏读。

不可重复读

不可重复读:在同一个查询中,两次读取的事务不一致,就是“不可重复读”。

这相比于脏读,是读到了已提交的事务的数据。还是以上述为例进行修改。

在这里插入图片描述
同学B两次读取的数据不一致,是因为同学A在期间修改过一次数据。读到不同事务修改后的数据,导致两次读取不一致,这种现象就是“不可重复读”。

幻读

幻读:本来数据 12 条,再次读取变成 20 条。两次读取的数量不一致,这种现象就是 “幻读”。

举例如图

在这里插入图片描述

同学B两次读取的数据的数量不同,是因为同学A开启事务进行插入新数据。这种现象就是幻读。


总结

总的来说,事务就是要么执行成功,要么执行失败。事务的特性是 ACID,AID 的特性是为了保持 C 一致性。
事务在并发过程中出现的情况有:脏读、不可重复读、幻读。


有启发点个赞 🌹

好文章不要错过,最近給大家分享的文章

MySQL的基础知识

1.MySQL的基础架构
2.SQL语句的执行流程
3.MySQL 的存储引擎

MySQL 索引

1.MySQL索引入门(一文搞定)

预计下篇分享:MySQL 的事务的隔离级别

本篇参考:小林coding

我是小辉,正在进行 Java 实习的 24 届应届毕业生。欢迎关注,持续分享,包括但不限于技术文章。全网同名…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2806298.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

深入探索Linux:ACL权限、特殊位与隐藏属性的奥秘

前言: 在Linux系统中,文件和目录的权限管理是一项至关重要的任务。它决定了哪些用户或用户组可以对文件或目录执行读、写或执行等操作。传统的Linux权限模型基于用户、组和其他的概念,但随着时间的推移,这种模型在某些情况下显得…

​​​​​​​Sora:OpenAI的革命性AI视频模型与其对未来影像创作的影响

随着深度学习技术和计算能力的进步,人工智能不仅在图像识别、自然语言处理等领域取得了卓越成就,同时也在不断突破视频处理和生成的边界。在这一背景下,OpenAI推出了Sora——一种新型的AI视频模型,标志着AI在视频内容创作领域的又…

高并发Server的基石:reactor反应堆模式

业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上,服务端server接收到IO请求后,是如何处理请求并最终进入业务流程的呢?这里不得不提到reactor反应堆模型。nginx tomcat redis nodejs dubbo等软件的网络处理模型都…

snmp协议开通教程

目录 一、什么是snmp协议? 二、snmp协议可以用来干什么? 三、snmp协议的开通 1、snmpv2协议开通 2、snmpv3协议开通 一、什么是snmp协议? SNMP(Simple Network Management Protocol)是一种用于网络管理的标准协议&a…

LDR6328 PD诱骗芯片:优化小家电Type-C接口充电体验与安全性的关键技术

随着科技的日新月异,小家电设备日趋智能化,Type-C接口因其便捷性在小家电领域的应用也日益增多。然而,Type-C接口的多样性导致设备在识别和使用不同充电方式时面临挑战。为应对这一问题,PD诱骗芯片应运而生,成为解决充…

ONLYOFFICE8.0——赋能办公

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-xdAoM2pHRmDFP0tF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

day41WEB 攻防-通用漏洞XMLXXE无回显DTD 实体伪协议代码审计

本章知识点: 1 、 XML&XXE- 原理 & 发现 & 利用 & 修复等 2 、 XML&XXE- 黑盒模式下的发现与利用 3 、 XML&XXE- 白盒模式下的审计与利用 4 、 XML&XXE- 无回显 & 伪协议 & 产生层面 配套资源(百度网盘&#x…

【MySQL】数据库概述

目录 一、为什么使用数据库? 二、数据库与数据库管理系统 2.1 相关概念 2.2 两者关系 三、 MySQL介绍 四、 RDBMS和非RDBMS 4.1 关系型数据库(RDBMS) 4.2 非关系型数据库(非RDBMS) 五、关系型数据库设计规则 …

【C语言】linux内核ipoib模块 - ipoib_send

一、中文注释 int ipoib_send(struct net_device *dev, struct sk_buff *skb,struct ib_ah *address, u32 dqpn) {struct ipoib_dev_priv *priv ipoib_priv(dev); // 获取IPoIB设备的私有数据struct ipoib_tx_buf *tx_req; // 发送请求结构体int hlen, rc; // 分别为头部长度…

代码随想录算法训练营第22天—回溯算法02 | ● *216.组合总和III ● 17.电话号码的字母组合

*216.组合总和III 题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html 视频讲解:https://www.bilibili.com/video/BV1wg411873x 考点 回溯剪枝 我的思路 回溯三要素 形参:目标和&#xff0c…

如何使用 NFTScan NFT API 在 Mantle 网络上开发 Web3 应用

Mantle Network 是建立在以太坊区块链之上的第 2 层扩展解决方案,采用了 Optimistic Rollups 技术,由 BitDAO 孵化,以提供比以太坊更快速和更经济的交易体验。由于 Mantle 基础链构建在 OP Stack 之上并与 EVM 兼容,因此以太坊网络…

设备树详解

设备树(Device Tree)基本概念及作用 设备树(Device Tree)基本概念 在内核源码中,存在大量对板级细节信息描述的代码。这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录,对内核而言这些platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的…

【Java程序设计】【C00267】基于Springboot的在线考试系统(有论文)

基于Springboot的在线考试系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 本系统是基于Springboot的在线考试系统;本系统主要分为管理员、教师和学生三种角色; 管理员登录系统后,可以对首页&#x…

Vue3 (unplugin-auto-import自动导入的使用)

安装 参考链接 npm i -D unplugin-auto-importvite.config.ts里面配置 import AutoImport from unplugin-auto-import/viteAutoImport({imports:[ vue,vue-router]})重新运行项目会生成一个auto-imports.d.ts的文件 /* eslint-disable */ /* prettier-ignore */ // ts-nochec…

【kubernetes】二进制部署k8s集群之,多master节点负载均衡以及高可用(下)

↑↑↑↑接上一篇继续部署↑↑↑↑ 之前已经完成了单master节点的部署,现在需要完成多master节点以及实现k8s集群的高可用 一、完成master02节点的初始化操作 二、在master01节点基础上,完成master02节点部署 步骤一:准备好master节点所需…

渗透测试之RCE漏洞

RCE(remote command execute)远程命令执行。应用程序的某些功能需要调用可以执行的系统命令的函数,如果这些函数或者函数的参数被用户控制,就可能通过命令连接符将恶意的命令拼接到函数中,从而执行系统命令。 常见的命…

ffmpeg深度学习滤镜

环境搭建 安装显卡驱动 当前所用显卡为NVIDIA的P6000,在英伟达的官网上查看对应的驱动, 下载NVIDIA-Linux-x86_64-535.104.05.run并安装。 sudo ./NVIDIA-Linux-x86_64-535.104.05.run 安装成功后用nvidia-smi命令后查看 安装的cuda版本不能超过12.2,选择安装cuda11.8。…

CloudFlare免费内网穿透

介绍 Cloudflare Tunnel是Cloudflare零信任网络的一个产品,用于打通企业、员工、设备之间的边界,从而摒弃掉VPN之类的过时技术(其实也不是过时,只不过是相对来说安全性、可控性较差) 通过Cloudflare Tunnel&#xff0c…

AOSP10 替换系统launcher

本文实现将原生的launcher 移除&#xff0c;替换成我们自己写的launcher。 分以下几个步骤&#xff1a; 一、新建一个自己的launcher项目。 1.直接使用android studio 新建一个项目。 2.修改AndroidManifest.xml <applicationandroid:persistent"true"androi…

腾讯文档(excel也一样)设置单元格的自动行高列宽

1. 选中单元格 可选择任意一个或者几个 2. 设置自动 行高和列宽 即可生效