事务·数据库

news2024/11/29 2:36:18

事务就是一个完整的业务逻辑

举例:

a账户转账至b账户,该操作是一个工作单元,要么同时成功要么同时失败,不可再分。

只有DML(INSERT DELETE UPDATE)语句才会有和事务有关系,因为这三个是操作数据库表中数据进行增删改的。

总结:事务就是指多个DML语句同时成功或同时失败。

  • 存储引擎和事务

只有InnoDB存储引擎支持事务,并提供一组用于记录事务性活动的日志文件。

在事务的执行过程中,每一条DML操作都会记录到“事务性活动的日志文件”中。

事务特性(ACID)

  • 原子性(Atomicity)

    事务是最小的单元,不可再分

  • 一致性(Consistency)

    在同一个事务中,所有操作必须同时成功或同时失败,以保证数据的一致性

  • 隔离性(Isolation)

    一个事务不会影响其他事务的运行。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰

  • 持久性(Durability)

    在事务完成以后,该事务对数据库所作的更改将持久地保存在数据库中,不会被回滚。

    其中,持久性是通过事务日志来保证的。日志包括了重做日志回滚日志。当我们通过事务对数据进行修改的时候,首先会将数据库的变化信息记录到重做日志中,然后再对数据库中对应的行进行修改。因此即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的重做日志,重新执行,从而使事务具有持久性。

事务的状态

MySQL根据操作执行的不同阶段,把事务大致划分成几个状态:

  • 活动的

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

  • 部分提交的

当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时,我们就说该事务处在 部分提交的 状态。

  • 失败的

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

  • 中止的

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

  • 提交的

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

在这里插入图片描述

提交和回滚

  • 提交事务(COMMIT):清空事务性活动的日志文件,将数据全部持久化到数据库表中

    • 提交事务意味着事务的结束,并且是一种全部成功的结束。
  • 回滚事务(ROLLBACK):将之前所有的DML操作全部撤销,并且清空事务性活动的日志文件

    • 回滚事务标志着事务的结束,并且是一种全部失败的结束。

MySQL中默认的事务行为是自动提交的,即每执行一条DML语句,就提交一次。但是这种提交不符合开发习惯,通常一个业务需要多条DML语句共同执行才能完成的,而且必须同时成功之后才能提交,所以不能执行一条语句就提交。

开启事务

START TRANSACTIONBEGIN:开启事务机制(关闭自动提交)

READ ONLY:标识当前事务是一个只读事务,也就是属于该事务的数据库操作只能读取数据,而不 能修改数据。

READ WRITE:标识当前事务是一个读写事务,也就是属于该事务的数据库操作既可以读取数据, 也可以修改数据。

WITH CONSISTENT SNAPSHOT:启动一致性读。

事务隔离级别

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

数据并发问题

访问相同数据的事务在不保证串行执行(执行完一个再执行另一个)的情况下会发生哪些问题:

1. 脏写( Dirty Write )
对于两个事务 Session A、Session B,如果事务Session A 修改了 另一个 未提交 事务Session B 修改过 的数据,那就意味着发生了 脏写
2. 脏读( Dirty Read )
对于两个事务 Session A、Session B,Session A 读取 了已经被 Session B 更新 但还 没有被提交 的字段。
之后若 Session B 回滚 ,Session A 读取 的内容就是 临时且无效 的。

Session A和Session B各开启了一个事务,Session B中的事务先将studentno列为1的记录的name列更新
为’张三’,然后Session A中的事务再去查询这条studentno为1的记录,如果读到列name的值为’张三’,而
Session B中的事务稍后进行了回滚,那么Session A中的事务相当于读到了一个不存在的数据,这种现象
就称之为 脏读 。
3. 不可重复读( Non-Repeatable Read )
对于两个事务Session A、Session B,Session A 读取 了一个字段,然后 Session B 更新 了该字段。 之后
Session A 再次读取 同一个字段,值就不同 了。那就意味着发生了不可重复读。

我们在Session B中提交了几个 隐式事务 (注意是隐式事务,意味着语句结束事务就提交了),这些事务
都修改了studentno列为1的记录的列name的值,每次事务提交之后,如果Session A中的事务都可以查看
到最新的值,这种现象也被称之为 不可重复读 。
4. 幻读( Phantom )
对于两个事务Session A、Session B, Session A 从一个表中 读取 了一个字段, 然后 Session B 在该表中 插
入 了一些新的行。 之后, 如果 Session A 再次读取 同一个表, 就会多出几行。那就意味着发生了幻读。

Session A中的事务先根据条件 studentno > 0这个条件查询表student,得到了name列值为’张三’的记录;
之后Session B中提交了一个 隐式事务 ,该事务向表student中插入了一条新记录;之后Session A中的事务
再根据相同的条件 studentno > 0查询表student,得到的结果集中包含Session B中的事务新插入的那条记
录,这种现象也被称之为 幻读 。我们把新插入的那些记录称之为 幻影记录 。

  • 按照严重性来排序:
  • 脏写 > 脏读 > 不可重复读 > 幻读

四种隔离级别

  • READ UNCOMMITTED:读未提交,在该隔离级别,所有事务都可以看到其他未提交事务的执行结
    果。不能避免脏读、不可重复读、幻读。
  • READ COMMITTED:读已提交,它满足了隔离的简单定义:一个事务只能看见已经提交事务所做
    的改变。这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。可以避免脏读,但不可
    重复读、幻读问题仍然存在。
  • REPEATABLE READ:可重复读,事务A在读到一条数据之后,此时事务B对该数据进行了修改并提
    交,那么事务A再读该数据,读到的还是原来的内容。可以避免脏读、不可重复读,但幻读问题仍
    然存在。这是MySQL的默认隔离级别。
  • SERIALIZABLE:可串行化,确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止
    其他事务对该表执行插入、更新和删除操作。所有的并发问题都可以避免,但性能十分低下。能避
    免脏读、不可重复读和幻读。
    在这里插入图片描述
    由于脏写问题过于严重,不论是哪种隔离级别,都不允许脏写的情况发生。
    在这里插入图片描述

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

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

相关文章

磨金石教育兴趣技能分享||运用好透视规律,就不会为大场面拍摄发愁了

许多摄影初学者,在拍摄简单的单独景物照或人物照时,经过简单的练习往往很快就能得心应手。 当画面稍微大一些,各种景物元素增多,空间立体感变强时,就会不知所措。拍出的照片不协调,而且杂乱。 这时候&…

2.专题. 逻辑层次结构——树

1. 树结构概述 现实生活中,具有很多层次关系:归纳为一种树状结构(一种层级结构) 2. 二叉树 2.2 二叉树分类 3.1.2.1 满二叉树 高度为4的满二叉树 3.1.2.2 完全二叉树 若一棵二叉树至多只有最下面两层的结点的度数可以小于2…

保护私密文件夹,可以这样设置隐藏起来

很多小伙伴在工作或生活中,都会有一些文件资料,不希望被让人随意看到,想要隐藏起来。其实只需要一个简单的操作,就可以把文件隐藏起来,不让人发现。 首先,我们可以先将需要隐藏的文件都放在一个文件夹里&a…

java常见的遍历

日常遍历的几种方式 首先我们先了解一下集合容器中日常遍历的几种方式&#xff1a; List集合遍历方式&#xff08;ArrayList&#xff09; // 遍历list集合private static void listTest() {List<String> list new ArrayList<String>();list.add("liubei&quo…

【Redis】新增数据结构

BitMap位图 Redis提供了Bitmaps这个“数据类型”可以实现对位的操作&#xff1a; &#xff08;1&#xff09; Bitmaps本身不是一种数据类型&#xff0c; 实际上它就是字符串&#xff08;key-value&#xff09; &#xff0c; 但是它可以对字符串的位进行操作。 &#xff08;2…

操作系统学习笔记_3 管程;死锁;内存

管程 信号量挺琐碎的&#xff0c;而且容易出错&#xff0c;顺序错了都会影响结果。 管程内的数据只有在管程内的过程&#xff08;函数&#xff09;才能访问&#xff1b;一次只允许一个进程进入管程。 monitor 是 java 语法的管程&#xff0c;每次只允许一个进程访问&#xff0…

[附源码]Python计算机毕业设计房屋租赁系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

关于求解器HFSS的那些事,以一个差分对仿真实操为例

很多刚刚接触HFSS的朋友可能对Solution type中的Driven Modal&#xff08;模式驱动&#xff09;和Driven Terminal&#xff08;终端驱动&#xff09;的概念有点混淆&#xff0c;本文着重讲解这两种求解类型的区别。 一、模式驱动和终端驱动的理解 模式驱动和终端驱动是HFSS的…

1.专题 存储结构和逻辑结构

1. 存储结构 软件完成对象抽象&#xff0c;需要分配一定的内存资源。 根据对象对内存使用的特征&#xff0c;可以把数据存储的特征划分为&#xff1a; 顺序存储链接存储索引存储 和 散列存储 1.1 顺序存储 对象占用的资源表现为一段连续的内存存储 图示如下&#xff1a; M…

产品分享:Qt鸿途电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0

​若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128313385 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、…

使用notepad++插件远程编辑linux下的配置文件

目录 1.安装插件管理器(Plugin Manager) 2.安装NppFTP 3.使用nppFTP连接远程linux服务器 1.安装插件管理器(Plugin Manager) 如果没有则需要安装 32bit 在v7.50后&#xff08;包括7.50&#xff09;不带有插件管理器(Plugin Manager)&#xff0c;所以我们需要手动安装 Plug…

高校房产管理系统主要功能模块有哪些?

数图互通房产管理 数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋…

Spire.XLS for Java 12.11.8 新年/圣诞巨献

Spire.XLS for Java是一个专业的 Java Excel API&#xff0c;使开发人员无需使用 Microsoft Office 或 Microsoft Excel即可创建、管理、操作、转换和打印 Excel工作表。 谷歌轻松找破解版 Spire.XLS for Java 支持旧的 Excel 97-2003 格式&#xff08;.xls&#xff09;和新的…

KingbaseES V8R3集群备份恢复案例之--- timingbackup备份

案例说明&#xff1a; KingbaseES V8R3集群自带了timingbackup.sh的脚本&#xff0c;可以通过一个脚本执行逻辑和物理备份&#xff0c;逻辑备份采用sys_dump&#xff0c;物理备份适用sys_basebackup&#xff0c;本案例详细记录了脚本的使用。 适用版本&#xff1a; KingbaseES …

利用催眠技巧绕开OpenAI的内容政策限制(仅供研究使用)

fork的仓库&#xff1a;https://github.com/JanYork/chatgpt-chinese-prompt-hack 声明&#xff1a;请仅作研究之用&#xff0c;不要违规使用&#xff01; 在hack成功后,通过屏蔽moderetions的api请求,可以绕过OpenAI对于输出内容的审查. 地址为:https://chat.openai.com/back…

国产免费倾斜摄影模型在线发布平台,一键查看、编辑、分享场景!

数十GB庞大的城市级三维实景模型&#xff0c;想在Web端加载并实时交互&#xff0c;看到每块地形、建筑物、每寸土地细节&#xff0c;不是一般平台能承受的。一般只能靠人工手动将模型压缩&#xff0c;不仅耗时耗力&#xff0c;效果还不可控。毕竟城市级的大体量模型不是每台设备…

物联网通信技术第9章 异构网络协同通信

9.1 异构网络模型 发展趋势 &#xff1a;用户对数据业务和移动业务的需求日渐增加&#xff0c;使用户需求呈现个性化、多样化等特点。 在异构多模式网络系统中&#xff0c;移动用户可以通过多模式多接口特性连接任一种网络。 异构网络&#xff1a; 指两个或以上的无线通信系统…

Meta AI 更新的 Data2vec 2.0 | 实现更快、更高效的视觉、语音和文本的自监督学习

文章目录一、前言二、data2vec 2.0 是如何工作的三、使用 data2vec 2.0 提高效率四、总结CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 论文地址&#xff1a;Data2vec: A General Framework for Self-supervised Learning in Speech, Vision and Langua…

MySQL - 1

Step1 : 下载 &#xff08;https://downloads.mysql.com/archives/community/&#xff09; ZIP版本免安装&#xff0c;直接解压 版本&#xff1a;5.7.31 文件名&#xff1a;Windows (x86, 64-bit), ZIP Archive Step2&#xff1a;解压 路径建议&#xff1a;C:\Program Files\m…

JAVA中的注解可以继承吗?

前言 注解想必大家都用过&#xff0c;也叫元数据&#xff0c;是一种代码级别的注释&#xff0c;可以对类或者方法等元素做标记说明&#xff0c;比如Spring框架中的Service&#xff0c;Component等。那么今天我想问大家的是类被继承了&#xff0c;注解能否继承呢&#xff1f;可…