MySQL 数据库事务

news2024/11/26 0:49:54

前言


事务概念及特性

事务是指数据库操作的一个逻辑单位,它由一组被视为一个整体的数据库操作组成。

事务具有以下特性:

  1. 原子性(Atomicity):事务中的所有操作要么全部成功执行,要么全部失败回滚。如果事务中的任何一部分操作失败,则将回滚到事务开始前的状态,之前已完成的操作会被撤销,数据库不会受到破坏。
  2. 一致性(Consistency):事务执行前后,数据库应该保持一致的状态。这意味着在事务开始前和结束后,数据库中的数据应满足所有的约束、触发器和其他规定的业务规则。
  3. 隔离性(Isolation):多个事务可以并发地执行,每个事务都认为自己在独立地操作数据,而不会受到其他事务的影响。隔离性确保了事务之间的数据相互隔离,避免并发执行时可能导致的问题,如脏读(读取到未提交的数据)、不可重复读(同一事务内两次读取到的数据不一致)和幻读(同一查询多次执行结果不一致)等。
  4. 持久性(Durability):一旦事务成功提交,其所做的修改将永久保存在数据库中,并在系统故障或重启后仍然存在。

事务管理

开启事务

在MySQL中默认DML执行的请求是自动提交的,开启事务就是关闭自动提交。

使用以下语句开启事务:

start transaction;

回滚事务 

如果在事务执行过程中发生了错误,可以使用以下语句回滚事务:

rollback;

提交事务

无错误,执行以下语句提交事务:

commit;

事务隔离级别

MySQL数据库支持多个事务隔离级别,用于控制并发事务之间的隔离程度。以下是MySQL中常见的四个事务隔离级别:

  • 读未提交(Read Uncommitted):最低的隔离级别,在该级别下,一个事务可以读取到另一个事务尚未提交的数据变更。这种隔离级别可能导致脏读、不可重复读和幻读的问题。
  • 读已提交(Read Committed):在该隔离级别下,一个事务只能读取到已经提交的数据变更。但是,由于并发操作可能导致其他事务的数据变更,可能会出现不可重复读和幻读的问题。
  • 可重复读(Repeatable Read):该隔离级别确保了同一事务中多次执行相同的查询都将获得相同的结果,即使其他事务对数据进行了修改。但是,仍然存在幻读的问题,即同一查询多次执行时结果集不一致。
  • 串行化(Serializable):最高的隔离级别,通过强制事务串行执行来避免并发问题。它会对所有读取的行加锁,从而完全消除脏读、不可重复读和幻读的问题。但是,串行化级别可能会降低系统的并发性能。

其中, 

  • 脏读(Dirty Read):脏读指的是一个事务读取了另一个事务尚未提交的数据。当一个事务对数据进行修改但未提交时,其他事务可能会读取到这个未提交的数据,如果修改后的数据被回滚,那么读取到的数据就是无效的或错误的,这就是脏读的情况。
  • 不可重复读(Non-repeatable Read):不可重复读指的是在同一个事务中,多次执行相同的查询,但在期间其他事务对数据进行了修改,导致每次查询得到的结果不一致。也就是说,一个事务内部两次读取同一数据的结果不一样,这种情况下称为不可重复读。
  • 幻读(Phantom Read):幻读指的是在同一个事务中,多次执行相同的查询,但在期间其他事务插入或删除了符合查询条件的数据,导致每次查询得到的结果集不一致。换句话说,第一次查询返回某些行,然后在事务进行的过程中,有新的行满足了前面的查询条件,再次查询时将出现"幻觉"般的新增行,这就是幻读的情况。
隔离级别脏读不可重复读(虚读)幻读

Read Uncommitted

读未提交

✔️✔️✔️

Read Committed

读已提交

✖️✔️✔️

Repeatable Read

可重复读

✖️✖️✔️

Serializable

串行化

✖️✖️✖️

设置隔离级别

MySQL的默认隔离级别是可重复读。可以使用以下语句设置事务的隔离级别:

set transaction isolation level <isolation level>;

其中,isolation level 可以是上述四个隔离级别之一。

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

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

相关文章

MySQL的使用——【初识MySQL】第二节

MySQL的使用——【初识MySQL】第二节 文章目录 MySQL环境变量的配置&#xff08;如使用Navicat可忽略&#xff09;使用命令行连接MySQL&#xff08;如使用Navicat可忽略&#xff09;步骤注意 NavicatNavicat的下载Navicat的使用连接MySQL新建表 总结总结 MySQL环境变量的配置&a…

新手入门吉他买什么好?千元内VEAZEN费森VZ200和恩雅X1pro综合评测,你会选新型材质HPL还是传统木吉他?

千元内入门吉他少不了VEAZEN费森VZ200单板系列和恩雅X1 PRO系列这两款热门系列&#xff0c;最近很多初学者朋友来私信&#xff0c;咨询这两款琴有什么优缺点&#xff0c;哪一款更值得初学者选购&#xff0c;那么今天&#xff0c;就以它们为本期的评测主角&#xff0c;全方位评测…

【《C# 10 和 .NET 6入门与跨平台开发(第6版)》——一本循序渐进的C#指南】

这个新版本对上一版做了全面修订&#xff0c;涵盖C# 10和.NET 6的所有新功能. 本书讨论面向对象编程、编写函数、测试函数、调试函数、实现接口以及继承类等主题&#xff1b;介绍.NET API&#xff0c;这些API可执行多种任务&#xff0c;如管理和查询数据&#xff0c;监视和改进…

vue组件方法 ref this.refs

在父组件中引入子组件&#xff0c;通常需要在父组件调用子组件的方法。就用到了组件方法 this.refs 使用前 需要在子组件模板定义 ref方法名 例如&#xff1a;红框所示 ref"name" //name为自定义名字 父组件使用时 只需要调用 this.$refs.name.子组件方法()&#x…

估值查看方法

估值查看方法 进入股票数据开放平台新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注释也…

【C++】—— 多态常见的笔试和面试问题

序言&#xff1a; 在上期&#xff0c;我们对多态进行了详细的讲解。本期&#xff0c;我给大家带来的是关于有关多态常见的笔试和面试问题&#xff0c;帮助大家理解记忆相关知识点。 目录 &#xff08;一&#xff09;概念查考 &#xff08;二&#xff09;问答题 1、简述一下…

离线情况下解决pyinstaller生成的可执行文件过大问题

由于工作原因&#xff0c;我的电脑没法上传和下载文件&#xff0c;所以一开始选择了anaconda完成python的工作。使用了pyinstaller将脚本生成可执行文件。但是生成出来的exe巨大无比&#xff08;一个简单的脚本300多M&#xff0c;要花两分钟时间打开&#xff09;&#xff0c;于…

Mysql进阶(上) -- 存储引擎,索引

&#x1f442; Seasons in the Sun - Westlife - 单曲 - 网易云音乐 &#x1f448;目录 -- 查看左栏 目录 &#x1f418;存储引擎 &#x1f981;Mysql体系结构 &#x1f981;简介 &#x1f981;InnoDB介绍 &#x1f981;MyISAM和Memory &#x1f981;选择 &#x1f981…

[USACO06JAN] The Grove S

题目 思路 一眼bfs 为了保证bfs能够绕一个圈&#xff0c;我们将这个联通块的最下面的点的下方割去&#xff0c;如图 绿色的地方就是割去的地方&#xff0c;然后我们再加个判断&#xff0c;使bfs从起点出发转一圈&#xff0c;再把这条分割线的左右两边步数最小连起来&#xff…

数字世界未来十年面貌如何?

随着科技的不断发展和创新&#xff0c;数字世界将在未来十年迎来一系列革命性的变化和进步。以下是数字世界未来十年面貌的一些预测&#xff1a; 人工智能全面普及&#xff1a;人工智能将逐渐渗透到我们生活的方方面面。从智能家居到智能交通&#xff0c;从个性化医疗到智能零售…

【vue】 Tinymce 富文本编辑器 不想让上传的图片转换成base64,而是链接

前言&#xff1a;最近项目上需要使用富文本编辑器&#xff0c;觉得tinymce很不错就用了&#xff0c;具体怎么在项目中使用参考 【vue】 vue2 中使用 Tinymce 富文本编辑器 【vue】 Tinymce 数据 回显问题 | 第一次正常回显后面&#xff0c;显示空白bug不能编辑 这两天又遇到了…

早在植物到达之前,泥土就可能形成蜿蜒的河流

在这张卫星视图中可以看到加利福尼亚州死亡谷国家公园恶水盆地的蜿蜒河道。在世界各地的贫瘠环境中都可以找到类似的单线通道&#xff0c;这些环境主要由细粒沉积物组成&#xff0c;几乎没有植被。 图片来源&#xff1a;Google 地球&#xff0c;2023 年 资料来源&#xff1a;地…

奔驰CAN FD嵌入式控制器开发硬件设计及应用趋势

CAN FD作为一种性能可靠、功能完善、成本合理的远程网络通信控制方式&#xff0c;集成CAN/CAN FD控制器的MCU、核心板、工控板及物联网解决方案已经被广泛应用到各个控制系统中&#xff0c;例如汽车电子、自动控制、智能大厦、电力系统、能源物流、智慧改装等各个领域。 中国经…

【ARM Coresight 系列文章 2.4 - Coresight 寄存器:DEVARCH,DEVID, DEVTYPE】

文章目录 1.1 DEVARCH(device architecture register)1.2 DEVID(Device configuration Register)1.3 DEVTYPE(Device Type Identifier Register) 1.1 DEVARCH(device architecture register) DEVARCH 寄存器标识了coresight 组件的架构信息。 bits[31:21] 定义了组件架构&…

深度学习(32)——CycleGAN

深度学习&#xff08;32&#xff09;——CycleGAN 文章目录 深度学习&#xff08;32&#xff09;——CycleGAN1. GAN原理2. CycleGAN&#xff08;1&#xff09;原理&#xff08;2&#xff09;核心思想&#xff08;3&#xff09;优点&#xff08;4&#xff09;缺点&#xff08;5…

【蓝牙通信】两个Hc-05之间的通信(教程)

目录 1、准备两个蓝牙模块&#xff0c;一个主机&#xff0c;一个从机 2、进入AT状态 3、蓝牙状态指示灯 4、具体步骤 1、准备两个蓝牙模块&#xff0c;一个主机&#xff0c;一个从机 2、进入AT状态 进入AT状态有2种方法&#xff1a; 1.先按住按键不放&#xff0c;再给模块…

IDEA SpringBoot项目引入外部jar并打包

1、首先&#xff0c;我们再pom.xml中导入依赖包时&#xff0c;打包可以正常进行。 但如果我们引入了第三方的外部jar包&#xff08;这里需要先把jar包添加到该项目依赖库中&#xff0c;这里不做演示&#xff09;&#xff0c;如图 2、导致打包时报错&#xff0c;程序包不存在或…

识别动物的软件,动物园碰到不认识的动物就用它

动物是人类的好朋友&#xff0c;我们常常会在动物园、公园等地方看到各种各样的动物。但是有时我们会遇到一些不认识的动物&#xff0c;这时我们应该怎么办呢&#xff1f;下面将介绍一些识别动物的方法以及遇到不认识动物的应对方法。 识别动物的方法 要想识别一个动物&#x…

【长链剖分】icpc 2022西安 L

Problem - L - Codeforces 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e610; const int mxe1e610;vector<int> G[mxn],lp;int N,Fa; int son[mxn],len[mxn];void dfs1(…

Apriori关联规则挖掘

在某个商场&#xff0c;销售经理希望通过重新布置商品的摆放情况来提高销售额&#xff0c;那么该如何摆放既有利于方便顾客购买&#xff0c;也刺激顾客的购买欲呢&#xff1f;商品的摆放并不是随意的&#xff0c;首先是将同类商品放在一起外&#xff1b;其次&#xff0c;可以考…