MySQL - 第11节 - MySQL事务管理

news2025/2/24 7:50:57

1.事务的概念

事务的概念:

• 上层看起来比较简单的需求,可能对应的后端要做很多工作,后端这些工作组合起来才是一个完整的需求解决的方案。

• 事务由一条或多条SQL语句组成,这些语句在逻辑上存在相关性,共同完成一个任务,事务主要用于处理操作量大,复杂度高的数据。比如转账就涉及多条SQL语句,包括查询余额(select)、在当前账户上减去指定金额(update)、在指定账户上加上对应金额(update)等,将这多条SQL语句打包便构成了一个事务。
• MySQL同一时刻可能存在大量事务,如果不对这些事务加以控制,在执行时就可能会出现问题。比如单个事务内部的某些SQL语句执行失败,或是多个事务同时访问同一份数据导致数据不一致的问题。

因此一个完整的事务并不是简单的SQL集合,事务还需要满足如下四个属性:

• 原子性: 一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中如果发生错误,则会自动回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
• 持久性: 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
• 隔离性: 数据库允许多个事务同时访问同一份数据,隔离性可以保证多个事务在并发执行时,不会因为由于交叉执行而导致数据的不一致(事务由多个SQL构成,隔离性是防止多个事务的SQL交替执行而导致的数据不一致问题)。

事务隔离分为不同级别,包括读未提交( Read uncommitted )、读提交( read committed )、可重复读( repeatable read )和串行化( Serializable )。

• 一致性: 在事务开始之前和事务结束以后,数据库的完整型没有被破坏,这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联型以及后续数据库可以自发性地完成预定的工作。

原子性、持久性、隔离性是手段,一致性是目的。一致性其实是仅停留在上层概念上的,也就是说原子性、持久性、隔离性都需要在MySQL内部实现,一致性不需要在MySQL内部实现,只要将原子性、持久性、隔离性这三点在MySQL内部实现了,那么结果就是一致的,也就实现了一致性。

上面的四个属性简称ACID:

• 原子性(Atomicity,又称不可分割性)。
• 一致性(Consistency)。
• 隔离性(Isolation,又称独立性)。
• 持久性(Durability)。

注:MySQL要提供事务机制,注定了MySQL内部编码和数据结构的支持。MySQL一定会同时存在多个事务,MySQL要对多个事务进行管理工作,需要先描述再组织,因此事务不要抽象的理解它,事务最终一定是要以某种数据结构+算法管理起来。

为什么会出现事务:

• 事务本身不是数据库类软件天然有的,事务被MySQL编写者设计出来,本质是为了当应用程序访问数据库的时候,事务能够简化我们的编程模型,不需要用户自己去考虑各种各样的潜在错误和并发问题。
• 如果MySQL只是单纯的提供数据存储服务,那么用户在访问数据库时就需要自行考虑各种潜在问题,包括网络异常、服务器宕机等。因此事务本质是为了应用服务的,而不是伴随着数据库系统天生就有的。


2.事务的版本支持

事务的版本支持:

通过 show engines 命令可以查看数据库引擎。如下:

说明一下:

• Engine: 表示存储引擎的名称。
• Support: 表示服务器对存储引擎的支持级别,YES表示支持,NO表示不支持,DEFAULT表示数据库默认使用的存储引擎,DISABLED表示支持引擎但已将其禁用。
• Comment: 表示存储引擎的简要说明。
• Transactions: 表示存储引擎是否支持事务,可以看到InnoDB存储引擎支持事务,而MyISAM存储引擎不支持事务。
• XA: 表示存储引擎是否支持XA事务。
• Savepoints: 表示存储引擎是否支持保存点。


3.事务的提交方式

查看事务的提交方式:

事务常见的提交方式有两种,分别是自动提交和手动提交。

通过show命令查看autocommit全局变量,可以查看事务的自动提交是否被打开。如下:

说明一下:autocommit的值为ON表示自动提交被打开,值为OFF表示自动提交被关闭,即事务的提交方式为手动提交。

设置事务的提交方式:

通过set命令设置autocommit全局变量的值,可以打开或关闭事务的自动提交。如下:

说明一下:将autocommit的值设置为1表示打开自动提交,设置为0表示关闭自动提交,相当于将事务提交方式设置为手动提交。 


4.事务的相关演示

准备测试表:

演示一:事务的常规操作

演示二:原子性

演示三:持久性

演示四:begin会自动更改提交方式

演示五:单条SQL与事务的关系


5.事务的隔离级别


6.关于一致性


7.多版本并发控制


8.RR与RC的本质区别

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

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

相关文章

聊聊transformers库; 微软推出ZeRO++技术:优化大型AI模型训练时间和成本

🦉 AI新闻 🚀 微软推出ZeRO技术:优化大型AI模型训练时间和成本 摘要:据报道,微软研究人员最近发布了一项名为ZeRO的新技术,旨在优化训练大型AI模型时常遇到的数据传输成本和带宽限制问题,可大…

【0212】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13 - 2)

文章目录 1. 回顾2. 密码校验通过3. 密码校验失败上一文:【0211】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13 - 1) 1. 回顾 在上一节内容中,讲解了Backend对于接收到来自frontend的字符串明文密码,和来自于来自pg_auth…

荷兰宽带数据泄露 1

又要引入一个新工具RouterPassView 大多数现代路由器都可以备份一个路由器的配置文件,然后在需要的时候从文件中恢复配置。路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码,路由器的登录密码,无线网络的KEY。 如果你忘记了这些密码…

第八十九天学习记录:C++核心:引用

引用的基本使用 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型 &别名原名 #include<iostream> using namespace std;int main() {//引用基本语法//数据类型 &别名 原名int num1 3;int &num2 num1;cout << "num1" << n…

输入路由器IP地址进入IIS问题解决

0x01 问题描述 Windows10系统&#xff0c;路由器IP为192.168.1.1&#xff0c;本机获取的IP为192.168.1.110&#xff0c;但在浏览器URL输入路由器IP时却没有进入路由登录页&#xff0c;而是进了IIS欢迎页面。 0x02 问题分析 由于我本机IP不是192.168.1.1&#xff0c;所以排除与…

第八十七天学习记录:Linux基础:基础指令Ⅱ

touch创建文件 可以通过touch命令创建文件 语法&#xff1a;touch Linux路径 1、touch命令无选项&#xff0c;参数必填&#xff0c;表示要创建的文件路径&#xff0c;相对、绝对、特殊路径符均可以使用 cat命令 查看文件内容 首先用Vim编辑器在刚刚新建的tanktest.txt中编辑…

MyBatis学习笔记--中篇

MyBatis学习 文章目录 MyBatis学习1、MyBatis 配置解析1.1、核心配置文件1.2、事务管理器&#xff08;transactionManager&#xff09;1.3、数据源&#xff08;DataSource&#xff09;1.4、属性&#xff08;properties&#xff09;1.5、类型别名&#xff08;typeAliases&#x…

1. AGPC-SLAM: Absolute Ground Plane Constrained 3D Lidar SLAM

AGPC-SLAM: Absolute Ground Plane Constrained 3D Lidar SLAM overview 关键思路 odom约束 回环检测约束 地面约束 总体约束 问题 地面约束似乎倾向于全部对齐到第一个平面&#xff0c;也就是说该方案假设了所有地面方程是同一个平面。后面的实验也验证了上述假设有问题&…

EfficientDet(EfficientNet+BiFPN)论文超详细解读(翻译+学习笔记+代码实现)

前言 在之前我们介绍过EfficientNet&#xff08;直通车&#xff1a;【轻量化网络系列&#xff08;6&#xff09;】EfficientNetV1论文超详细解读&#xff08;翻译 &#xff0b;学习笔记代码实现&#xff09; 【轻量化网络系列&#xff08;7&#xff09;】EfficientNetV2论文超详…

Linux:etc/group

etc/group文件中保存着系统中所有组的名称&#xff0c;以及每个组中的成员列表。 文件中的一行为一个组的信息&#xff0c;具体如下&#xff1a; 如果组口令字段为x的话&#xff0c;就还有一个etc/gshadow文件用于存放组口令。 GID用于标识一个组&#xff0c;应保证其唯一性。…

Spring Boot 中的事务回滚规则

Spring Boot 中的事务回滚规则 在应用程序中&#xff0c;事务管理是一个重要的概念。事务是指一系列的操作&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。在Spring Boot中&#xff0c;我们可以使用事务管理器来管理事务。在使用事务管理器的时候&#xff0c;一个…

ElasticSearch——复合查询

Elasticsearch 语雀&#xff08;完整笔记&#xff09; 复合&#xff08;compound&#xff09;查询&#xff1a;复合查询可以将其它简单查询组合起来&#xff0c;实现更复杂的搜索逻辑。常见的有两种&#xff1a; fuction score&#xff1a;算分函数查询&#xff0c;可以控制…

《计算机系统与网络安全》第七章 身份认证

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

【单片机】STM32单片机读取旋转编码器,TIM定时器捕获

文章目录 旋转编码器介绍主程序逻辑直接检测用外部中断检测下降沿定时器直接解码旋转编码器 旋转编码器介绍 旋转编码器简单来说&#xff0c;就是会输出2个PWM&#xff0c;依据相位可以知道旋转方向&#xff0c;依据脉冲个数可以知道旋转的角度。一般旋转一圈有一个固定数值的…

chatgpt赋能python:Python输出\n的用法及优势

Python 输出\n 的用法及优势 在Python编程语言中&#xff0c;我们常常需要输出字符串&#xff0c;并在特定地方换行。在这种情况下&#xff0c;使用\n是一种非常方便的方式。在本文中&#xff0c;我们将详细介绍Python的输出\n的用法及其优势。 什么是\n&#xff1f; \n是一…

Spark17-18-19

17. Spark执行流程 17.1 创建SparkContext 使用spark-submit脚本&#xff0c;会启动SparkSubmit进程&#xff0c;然后通过反射调用我们通过--class传入类的main方法&#xff0c;在main方法中&#xff0c;就行我们写的业务逻辑了&#xff0c;先创建SparkContext&#xff0c;向M…

YOLOv5-7.0添加BottleNet transformer

YOLOv5主干特征提取网络为CNN网络&#xff0c;CNN具有平移不变性和局部性&#xff0c;缺乏全局建模长距离建模的能力&#xff0c;引入自然语言领域的Transformer可以形成CNNTransFormer架构&#xff0c;充分结合两者的优点&#xff0c;提高目标检测效果。 1. BoTNet 论文地址…

BeautifulSoup爬取豆瓣电影数据

BeautifulSoup爬取豆瓣TOP250 豆瓣爬取地址 https://movie.douban.com/top250?formattext BeautifulSoup官网地址 https://www.rddoc.com/doc/BeautifulSoup/4.5.3/zh/quick-start/ 安装所需函数库 pip install beautifulsoup4pip install lxmlpip install requests导入…

IIS安装localhost显示下载,urlrewrite设置

1.取消ftp服务勾选 2. ping localhost ping 127.0.0.1 如果显示 &#xff1a;&#xff1a;1 则需要禁用ipv6 在注册表 找到并单击下面的注册表子项&#xff1a; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ 双击“DisabledComponents”以修…

Git2023最新版下载与安装教程(Windows版)

Windows版Git下载与安装教程 1. 下载Git2. 安装Git3. 配置Git 1. 下载Git 打开Git官网下载地址&#xff1a;https://git-scm.com/downloads 点击Download for Windows 选择git版本进行下载 2. 安装Git 双击安装包 点击Next 选择Git的安装路径&#xff0c;点击Next 选择…