高级篇十三、事务基础知识

news2025/4/21 9:59:55

第13章_事务基础知识

1、数据库事务概述

事务是数据库区别文件系统的重要特性之一,当我们有了事务会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统的崩溃而丢失!

1.1 存储引擎支持情况

SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。

1.2 基本概念

**事务:**一组逻辑操作单元,使数据从一种状态变换到另一种状态。

1.3 事务的ACID属性

  • 原子性(atomicity)
  • 一致性(consistency)
  • 隔离型(isolation)
  • 持久性(durability)

​ redo undo日志

1.4 事务的状态

我们现在知道 事务 是一个抽象的概念,它其实对应着一个或多个数据库操作,MySQL根据这些操作所执

行的不同阶段把 事务 大致划分成几个状态:

  • 活动的(active)

​ 事务对应的数据库操作正在执行过程中时,我们就说该事务处在 活动的 状态。

  • 部分提交的(partially committed)

​ 当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并 没有刷新到磁盘

​ 时,我们就说该事务处在 部分提交的 状态。

  • 失败的

    当事务处在 活动的 或者 部分提交的 状态时,可能遇到了某些错误(数据库自身的错误、操作系统
    
    错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行,我们就说该事务处在 失
    
    败的 状态
    
  • 中止的

    如果事务执行了一部分而变为 失败的 状态,那么就需要把已经修改的事务中的操作还原到事务执
    
    行前的状态。换句话说,就是要撤销失败事务对当前数据库造成的影响。我们把这个撤销的过程称
    
    之为 回滚 。当 回滚 操作执行完毕时,也就是数据库恢复到了执行事务之前的状态,我们就说该事
    
    务处在了 中止的 状态。
    
  • 提交的(committed)

​ 当一个处在 部分提交的 状态的事务将修改过的数据都 同步到磁盘 上之后,我们就可以说该事务处

​ 在了 提交的 状态。

在这里插入图片描述

2、如何使用事务

2.1 显式事务

  • 开启事务

    START TRANSACTION 或者 BEGIN

    START TRANSACTION 语句相较于 BEGIN 特别之处在于,后边能跟随几个 修饰符 :

    • READ ONLY :标识当前事务是一个 只读事务
    • READ WRITE :标识当前事务是一个 读写事务(默认)
    • WITH CONSISTENT SNAPSHOT :启动一致性读
  • 一系列事务中的操作(主要是DML,不含DDL)

  • 提交事务 或 中止事务(即回滚事务)

    • COMMIT 提交事务。当提交事务后,对数据库的修改是永久性的。
    • ROLLBACK 回滚事务。即撤销正在进行的所有没有提交的修改
    • ROLLBACK TO [SAVEPOINT] 将事务回滚到某个保存点。

2.2 隐式事务

MySQL中有一个系统变量 autocommit :SHOW VARIABLES LIKE ‘autocommit’;

如果我们想关闭这种 自动提交 的功能,可以使用下边两种方法之一:

  • 把系统变量 autocommit 的值设置为 OFF -> SET autocommit = OFF;
  • 显式的的使用 START TRANSACTION 或者 BEGIN 语句开启一个事务。这样在本次事务提交或者回滚前会暂时关闭掉自动提交的功能。

2.3 隐式提交数据的情况

  • 数据定义语言(Data Definition langurage,缩写为DDL)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lx1lnVIA-1683942782425)(E:\学习笔记\MySQL\13 高级篇十三-事务基础知识.assets\image-20230510225510723.png)]

  • 隐式使用或修改mysql数据库中的表
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fWIiMNGh-1683942782426)(E:\学习笔记\MySQL\13 高级篇十三-事务基础知识.assets\image-20230510225633163.png)]

  • 事务控制或关于锁定的语句
    ​	[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UCdBhOi8-1683942782427)(E:\学习笔记\MySQL\13 高级篇十三-事务基础知识.assets\image-20230510225722349.png)]
    在这里插入图片描述

2.4 使用举例:提交和回滚

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NSBY6cd7-1683942782428)(E:\学习笔记\MySQL\13 高级篇十三-事务基础知识.assets\image-20230512204243625.png)]

2.5 使用举例:测试不支持事务的 Engine

MyISAM 不支持事务

2.6 使用举例: savepoint

3、事务的隔离级别

MySQL是一个 客户端/服务器 架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每
个客户端与服务器连接上之后,就可以称为一个会话( Session )。每个客户端都可以在自己的会话中
向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是对于服务器来说可能同时处理
多个事务。事务有 隔离性 的特性,理论上在某个事务 对某个数据进行访问 时,其他事务应该进行 排
队 ,当该事务提交之后,其他事务才可以继续访问这个数据。但是这样对 性能影响太大 ,我们既想保持
事务的隔离性,又想让服务器在处理访问同一数据的多个事务时 性能尽量高些 ,那就看二者如何权衡取
舍了。

3.1 数据并发问题

针对事务的隔离性和并发性,我们怎么做取舍呢?先看一下访问相同数据的事务在不保证串行执行的情况下可能会出现哪些问题:

1、脏写

修改另一个事务未提交的数据

2、脏读

读另一个事务未提交的数据

3、不可重复读

4、幻读

对于两个事务Session A、Session B, Session A 从一个表中 读取 了一个字段, 然后 Session B 在该表中 插

入 了一些新的行。 之后, 如果 Session A 再次读取 同一个表, 就会多出几行。那就意味着发生了幻读。

3.2 SQL中的四种隔离级别

我们愿意舍弃一部分隔离性来换取一部分性能在这里就体现在:设立一些隔离级别,隔离级别越低,并

发问题发生的就越多。 SQL标准 中设立了4个 隔离级别 :

  • READ UNCOMMITTED :读未提交,在该隔离级别,所有事务都可以看到其他未提交事务的执行结

    果。不能避免脏读、不可重复读、幻读。

  • READ COMMITTED :读已提交,它满足了隔离的简单定义:一个事务只能看见已经提交事务所做

    的改变。这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。可以避免脏读,但不可

    重复读、幻读问题仍然存在。

  • REPEATABLE READ :可重复读,事务A在读到一条数据之后,此时事务B对该数据进行了修改并提

​ 交,那么事务A再读该数据,读到的还是原来的内容。可以避免脏读、不可重复读,但幻读问题仍

​ 然存在。这是MySQL的默认隔离级别。

  • SERIALIZABLE :可串行化,确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止

​ 其他事务对该表执行插入、更新和删除操作。所有的并发问题都可以避免,但性能十分低下。能避

​ 免脏读、不可重复读和幻读。

3.3 MySQL支持的四种隔离级别

MySQL的默认隔离级别为REPEATABLE READ,我们可以手动修改一下事务的隔离级别。

# 查看隔离级别,MySQL 5.7.20的版本之前
SHOW VARIABLES LIKE 'tx_isolation';
# 查看隔离级别,MySQL 5.7.20的版本及之后
SHOW VARIABLES LIKE 'transaction_isolation';

3.4 如何设置事务的隔离级别

SET [GLOBAL|SESSION] TRANSACTION_ISOLATION = '隔离级别'
#其中,隔离级别格式:
> READ-UNCOMMITTED
> READ-COMMITTED
> REPEATABLE-READ
> SERIALIZABLE

4、事务的分类

可以把事务分为以下几种类型:

扁平事务(Flat Transactions)

带有保存点的扁平事务(Flat Transactions with Savepoints)

链事务(Chained Transactions)

嵌套事务(Nested Transactions)

分布式事务(Distributed Transactions)

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

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

相关文章

网络通信-路由交换基础

目录 一、一个简单网络通信(1v1) 二、通信介质 三、交换机通信原理(3v3、5v5) 广播的概念 交换机转发消息时,怎么知道该发给哪个设备 四、路由器通信原理(500v500、5000v5000) 五、消息分…

App Inventor 2 算法之 - 二分算法(Binary Search)实现,快速查找定位

应用介绍 二分算法(Binary Search)是生活中非常常用的折半算法,能解决快速查找、快速定位的问题,主要用到数学和逻辑代码块。 本示例程序演示了采用普通遍历的方式和二分的方式分别需要几次能够猜中随机给出的数字。 二分算法&a…

k8s-CKS真题-故障排查Sysdig falco

目录 题目环境搭建安装sysdig创建容器创建目录、文件 解题 - sysdig解题 - falco错误模拟环境参考 题目 Task: 使用运行时检测工具来检测 Pod tomcat123 单个容器中频发生成和执行的异常进程。 有两种工具可供使用:sysdigfalco注:这些工具只…

如何有效提高企业优秀人才的留存率?

对于企业而言,有效的员工入职流程应是一个持续的项目。优秀人才使企业持续性发展的基石,那么该如何提高企业优秀人才的留存率呢? 有调查显示新员工入职后短时间内离职的比率日益上升,因此做好员工入职,短时间内增加员工…

msvcp140.dll是什么东西

昨天在打开photoshop软件的时候,突然间就提示msvcp140.dll丢失,无法打开运行。msvcp140.dll是什么东西呢?今天早上用了一个上午的时间,特意搞清楚了msvcp140.dll是什么以及如何修复电脑msvcp140.dll文件丢失问题。下面小编就把整理…

八年软件测试感悟--写给还在迷茫的你

不知不觉已经从事软件测试八年了,2015毕业到进入外包公司外包给微软做软件测试, 到现在加入著名的外企。八年的时间过得真快。 长期的测试工作也让我对软件测试有了比较深入的认识。但是我至今还是一个底层的测试人员,我的看法都比较狭隘&…

热乎的面经——水滴石穿

⭐️前言⭐️ 本文记录博主面试北京某大厂所记录的面经,回答答案仅供参考。 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 …

公网SSH远程访问家中的树莓派[无公网IP]

文章目录 前言如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地址…

计算机视觉的深度学习 Lecture4:Regularization + Optimization 笔记 EECS 498.008

课件非常好! 数值计算梯度 问题是慢,每个都要注意做步长,求除法。 应该用求导方法解决。 SGD通过每次抽取一部分(mini-batch)来计算梯度,而不是遍历整个数据集来求梯度,大大增大了求梯度速…

18 KVM管理虚拟机-虚拟机生命周期总体介绍

文章目录 18 KVM管理虚拟机-虚拟机生命周期总体介绍18.1 概述18.2 虚拟机状态18.3 状态转换18.4 虚拟机标识 18 KVM管理虚拟机-虚拟机生命周期总体介绍 18.1 概述 为了更好地利用硬件资源,降低成本,用户需要合理地管理虚拟机。本节介绍虚拟机生命周期过…

零基础学网络安全

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决. 一…

spring的事物

这是我第三次接触事物了,mysql一次,以前的也看过一次。 事物的四大特点: 原子性:多条sql保证同时成功,同时失败。 一致性:在事物的开启和结束,数据库的完整性不被破坏。 隔离性:多线…

centos7 配置密钥登录

目录 1.xshell生成公钥 1.工具->新建用户密钥生成导向 2.选择4096下一步​编辑 3.输入用户密钥密码,也可以不输入 4.保存为文件 5.导出私钥文件 2.服务器配置 1.将公钥文件上传至服务器上 3.链接服务器 1.新建连接配置ip 2.设置用户身份验证 3.选择1.5上…

大疆无人机空三建模干货分享(大疆智图集群建模超详细教程)

Part 01 大疆无人机空三建模干货分享(大疆智图集群建模超详细教程) 大疆智图集群简介 大疆在今年5月推出的智图3.0.0及以上版本中加入了集群功能,有集群版许可的用户可以使用此功能。智图集群是由一台主节点分配任务控制多台同局域网内子节点设备进行空三和建模。集…

【Java零基础入门篇】第 ④ 期 - 继承(三)

【Java零基础入门篇】第 ④ 期 - 继承(三) 博主:命运之光专栏:Java零基础入门 学习目标 1.掌握继承性的主要作用、实现、使用限制; 2.掌握this和super的含义及其用法; 3.掌握方法覆写的操作; 4.…

内网渗透(七十)之域权限维持之重置DSRM密码

重置DSRM密码 目录服务还原模式(DSRM)是Windows域环境中域控的安全模式启动选项。每个域控都有一个本地管理员administrator账户,也就是(DSRM账户)。DSRM的用途是允许管理员在域环境出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。也就是说,DS…

关于安卓毛玻璃实现(三)recyclerview静态毛玻璃

背景 毛玻璃,开发中又爱又恨的一个话题,玩法层出不穷,有动态的,也有静态的。有的是实时模糊,有些只需要模糊一次,本文的毛玻璃实现,就是静态毛玻璃。 开发环境 win 10 as 4 jdk 1.8 代码 &…

在中国,年收入20W是什么水平?答案扎心了(文末附最新招聘)

最近关于“年薪20万算什么水平?”冲上了热搜。对此,许多网友纷纷表示自己的看法,有的认为这个收入属于中高收入人群了。 因为按照最近某招聘网站发布的《中国企业招聘薪酬报告》来看,今年一季度38城企业平均招聘薪酬为10101元&…

用 ChatGPT 读 Vue3 源码,会怎么样?

前言 ChatGPT 最近十分火爆,今天我也来让 ChatGPT 帮我阅读一下 Vue3 的源代码。 都知道 Vue3 组件有一个 setup函数。那么它内部做了什么呢,今天跟随 ChatGPT 来一探究竟。 实战 setup 函数在什么位置呢,我们不知道他的实现函数名称&…

Ebean 字段别名配置引发语法问题

前言 Ebean 没听过?这里简单给你介绍下:Ebean 是一个 Java ORM(Object-Relational Mapping)框架,具有以下优势: 简单易用:Ebean 的 API 设计简单易用,可以快速上手,无需…