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

MySQL-事务

MySQL-事务

1.什么是事务

举例:想象炒菜的过程。

  1. 洗菜
  2. 切菜
  3. 炒菜
  4. 装盘

我相信缺少任何任何一个步骤,都不完美!!!可以将炒菜的过程理解为一个事务,是一组操作的集合,而MySQL中的事务也是如此。但在MySQL中定义了事务的一些特性。只有符合这些特征才能称之为MySQL事务,它们保证了数据库在并发环境下的正确性和可靠性。

2.事务的特性

1.1原子性

在MySQL中事务像原子一样不可分割的,要么都执成功,要么都执行失败。事务中的SQL语句执行错误,已经执行的SQL语句必须撤销,回滚到事务执行之前的状态。

1.2一致性

指的是事务开始和结束前后,数据库的完整性没有被破坏。(例如转账前后双方的金额和是不会发生变化的,保持一致)

1.3持久性

事务一旦提交,其执行的结果将持久化到数据库,即使系统宕机也能恢复。

1.4.隔离性

表示多个事务可以同时执行,互相隔离。

3.事务的分类

保存点:保存点(Savepoint)是事务过程中的一个中间状态,它可以在事务执行过程中被创建和命名。保存点允许事务回滚到某一状态。

3.1扁平事务

使用最频繁的事务,存在一个隐式的保存点,有且仅有这一个隐式保存点,在开始事务时隐式创建的保存点。当然,我们也可以在事务中自定义保存点。

-- 创建一个保存点
SAVEPOINT save_point_name;
-- 删除某个一保存点
release savepoint point_name;
-- 回滚到某一个保存点
ROLLBACK TO save_point_name;

例如:对商品表进行第一次修改,设置保存点,进行第二次修改,回滚到设置的保存点,然后提交。

-- 商品表如下
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(11)          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(32)      | NO   |     | NULL    |                |
| count | int(10) unsigned | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+begin;
update product set count = 2500 where id = 1;
savepoint p1;
-- 该条数据被回滚,修改不生效
update product set count = 2000  where id = 1;
rollback to p1;
commit;

扁平事务保存点的易失性:带有保存点的扁平事务发生系统崩溃故障时,保存点会消失,一旦保存消失,只能恢复到事务最开始的状态。

注意:rollback不指定回滚的保存点,将默认回滚到隐式保存点。

3.2链事务

链事务的本质是开启多个事务,它们是独立提交的且处于同一层级,提交一个事务时,释放不需要的数据对象。在提交事务和开始下一个事务操作会合并成一个原子操作,下一个事务可以看见上一个事务的执行结果。

commit和commit work的区别:

complection_type:设 set @@completion_type=1;

  1. complection_type=0,commit和commit work是一样的效果,提交事务。
  2. complection_type=1,执行commit work/commit后会自动开启一个相同隔离级别的事务。
  3. complection_type=2,commit work/commit等同于commit and release,事务提交后断开与服务器的连接并重新开启一个会话。

3.3嵌套事务

嵌套事务本质上也是多个事务嵌套执行,由最外层的事务控制内层事务。内层事务也可以嵌套其他事务。可以看做它们是树形的具有父子关系。子事务可以提交也可以回滚,回滚不会影响父事务,只会影响当前事务,但是提交操作不会立即生效,需要最后和父事务同时提交。

4.事务的实现

1.redo

主要功能:实现事务的持久性。

记录物理级别上的页修改,当事务提交时,必须先将事务的所有日志写入到redo日志文件进行持久化。

数据库存储数据的位置位于磁盘,想要知道磁盘的内容我们需要将其加载到内存,在内存中读取和操作数据。数据库对数据进行更改时,需要将数据页加载到buffer pool(缓存池),在buffer pool中更改数据,当buffer pool中的数据还没有同步到磁盘,就会暂时和磁盘页的内容不一致,这些未同步的数据页,通常称之为脏页(dirty page)。如果出现数据库崩溃或者是宕机,这些脏页的数据丢失,从而失去了持久性。因此数据库需要一种机制来记录对数据的修改。即使数据发生故障也能进行恢复。

redo实现日志持久化的原理:事务将这些修改操作写入redo log buffer,准备提交事务时。系统会将redo log buffer中的修改操作写入redo log file。

2.undo

undo日志通过记录数据的历史版本和撤销操作信息,方便数据进行回滚。

undo是逻辑日志,当发生回滚时,所有的修改都被逻辑取消了。InnoDB存储引擎回滚时,它实际上做的是与之前相反的工作,例如插入操作,Innodb存储引擎会完成一个delete;删除操作,InnoDB存储引擎会执行一个insert操作;update操作,Innodb存储引擎会执行一个相反的update操作。

5.事务管理器

InnoDB的事务管理器是InnoDB数据库引擎的核心组件之一,它负责协调和管理数据库事务的处理。

在MySQL中,事务中对数据的锁定都是由事务管理器来管理的。当一个事务获取了对某一行的锁时,该锁将一直保持有效,直到事务结束(提交或回滚)才会被释放。

在事务执行期间,如果其他事务尝试获取同一行的锁,它将被阻塞,直到当前事务释放对该行的锁为止。这样可以确保在一个事务执行期间,其他事务无法修改该行,从而保持了数据的一致性。

在事务提交或回滚时,事务管理器将释放所有该事务所获取的锁。这样,其他事务就可以获取这些锁并对数据进行修改。如果事务被回滚,那么它对数据的修改将被撤销,同时对数据的锁定也将被释放。

相关文章:

MySQL-事务

MySQL-事务 1.什么是事务 举例:想象炒菜的过程。 洗菜切菜炒菜装盘 我相信缺少任何任何一个步骤,都不完美!!!可以将炒菜的过程理解为一个事务,是一组操作的集合,而MySQL中的事务也是如此。但…...

自动定时删除磁盘文件的脚本(从文件日期最早的开始删)

#!/bin/bash# 指定的挂载点 MOUNTPOINT"/media/vm/MyDisk512GB"# 设置磁盘大小的限制 (例如:800G) LIMIT$((800 * 1024 * 1024)) # 单位是KB# 获取挂载点的已使用空间 USED_SPACE$(df -kP "$MOUNTPOINT" | tail -1 | awk {print $3})echo &quo…...

拆解CPU的基本结构和运行原理

CPU的基本结构 CPU是一个计算系统的核心 南北桥芯片将CPU与外设连接起来 CPU执行流程 CPU的电路基础 组合电路基本原理 时序电路基本原理 多核成为主流 汇编语言和寄存器 中断的基本原理 中断的产生 中断服务程序 CPU 做为计算机的总司令官,它管理着计算…...

Docker安装——Ubuntu (Jammy 22.04)

一、为什么要用 Ubuntu?(centos和ubuntu有什么区别) 使用lsb_release命令:lsb_release -a ,即可查看ubantu的版本,但是为什么要使用ubantu 呢? 区别:1、centos基于EHEL开发,而ubunt…...

Fast DDS之Transport

目录 transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP,TCP,SHM。...

爱普生L125X_L325X系列打印机Wi-Fi配置方法(Smart Panel)

准备工作: 手机需要下载“Epson Smart Panel”APP; 配置无线(Wi-Fi)方法 说明:SSID名称(Wi-Fi名)不能包含中文字符,路由器需要选择2.4GHz频段; 1. 打开“Epson Smart Panel”软件&#xff0…...

【回顾一下Docker的基本用法】

文章目录 回顾一下Docker的基本用法1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结 1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结 1.4.…...

【Python】Python基础知识

【Python】Python基础知识 关键字 查看Python关键字: >python >>>import keyword >>>keyword.kwlist 注释 注释有两方面作用: (1)提高程序的可读性(最重要的作用)&#xff1b…...

【计算机视觉 05】YOLO论文讲解:V1-V7

https://ai.deepshare.net/live_pc/l_63243a65e4b050af23b79338 Part1.目标检测与YOLO系列 1. 目标检测任务及发展脉络 2. YOLO的发展史 Anchors Base原理: Part2.YOLOV1-V3 3. YOLO V1的网络结构 4. YOLO V3的网络结构与实验结果 Part3.YOLO的进化 5. YOLO V4的网络…...

git全局与单仓库的密码管理

概要 在使用git时,有默认的全局配置,每个仓库也有自己的配置,在使用时常常傻傻分不清楚,现在进行一个简单的整理记录。 一般情况下全局配置中的git账号和邮箱通常设置成自己的,其他仓库再根据项目需要进行单独配置&a…...

IDEA的使用(一) (IntelliJ IDEA 2022.1.3版本)

目录 1. IDEA项目结构 2. 模块的导入操作 2.1 正规操作 2.2 取巧操作 2.3 出现乱码 2.4 模块改名 3. 代码模板的使用 后缀补全(Postfix Completion)、实时模板(Live Templates)菜单里面什么介绍都有,可以自学&a…...

javaee SpringMVC文件上传 项目结构

引入依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…...

JavaScript DOM 函数大全详解(使用最新的 JS 语法)

JavaScript DOM 函数大全详解&#xff08;使用最新的 JS 语法&#xff09; JavaScript 的 Document Object Model&#xff08;DOM&#xff09;是用于操作网页内容的编程接口。在最新的 JavaScript 语法下&#xff0c;我们有很多方便和高效的方法来处理 DOM。下面是一些常用 DO…...

Stm32_标准库_8_ADC_光敏传感器_测量具体光照强度

ADC简介 测量方式 采用二分法比较数据 IO通道 ADC基本结构及配置路线 获取数字变量需要用到用到光敏电阻的AO口&#xff0c;AO端口接在PA0引脚即可 测得的模拟数据与实际光照强度之间的关系为 光照强度 100 - 模拟量 / 40;代码&#xff1a; 完整朴素代码&#xff1a; #in…...

基于SSM的固定资产管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

Leetcode---364场周赛

题目列表 2864. 最大二进制奇数 2865. 美丽塔 I 2866. 美丽塔 II 2867. 统计树中的合法路径数目 一、最大二进制奇数 这题只要你对二进制有了解(学编程的不会不了解二进制吧)&#xff0c;应该问题不大&#xff0c;这题要求最大奇数&#xff0c;1.奇数&#xff1a;只要保证…...

使用 Powershell 检索不理解的命令

使用 Powershell 检索不理解的命令 尝试使用 Powershell 完成 Powershell 的命令行 使用 Powershell 时&#xff0c;有时您会忘记某个 cmdlet 或想要了解哪些 cmdlet 可用。在这种情况下&#xff0c;最好在互联网上查找&#xff0c;但您也可以使用 Powershell 函数来完成。 以…...

基于 FPGA 的机器博弈五子棋游戏

基于 FPGA 的机器博弈五子棋游戏 一,设计目的 五子棋是一种深受大众喜爱的游戏,其规则简单,变化多端,非常富有趣味性 和消遣性。棋类游戏在具备娱乐性、益智性的同时也因为其载体大多是手机, 电脑等移动互联网设备导致现代社会低头族等现象更加严重,危害青少年的身 体健康…...

uCOSIII实时操作系统 三 移植

目录 uCOSIII简介&#xff1a; 准备工作&#xff1a; 准备基础工程&#xff1a; UCOSIII工程源码&#xff1a; UCOSIII移植&#xff1a; 向基础工程中添加相应的文件夹 向工程中添加分组 常见问题&#xff1a; 下载验证&#xff1a; uCOSIII简介&#xff1a; UCOS-I…...

机器学习之SGD, Batch, and Mini Batch的简单介绍

文章目录 总述SGD(Stochastic Gradient Descent)(随机梯度下降&#xff09;Batch &#xff08;批量&#xff09;mini Batch (迷你批量&#xff09; 总述 SGD, Batch, and Mini Batch是可用于神经网络的监督学习计算权重更新的方案&#xff0c;即∆wij。 SGD(Stochastic Gradi…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...