MySQL中有事务无法回滚的语句?

news2025/1/11 19:46:59

目录

0.从修改表结构语句开始

1.DDL(Data Definition Language) 数据定义语言

2.DCL(Data Control Language) 数据控制语言

 3.在该事务还没提交时开启新事务

4.锁操作

5.行政声明语句

6.主从复制的从机操作

7.如何避免出现隐式提交导致的错误


0.从修改表结构语句开始

试想在这个场景,客户A开启一个事务,修改表1第一个字段的值,而之后客户B此时在删除表1结构的第一个字段,那这时候就会出问题了。

元数据锁(MDL)可以解决这个问题。该锁是系统自动控制的,无需显示使用的,在访问一张表的时候会自动加上的。这个特性是在MySQL5.5中引入的。

  • 当对一张表进行增删改查的时候,加MDL读锁(共享锁)
  • 当对表结构进行变更操作的时候,加MDL写锁(排他)

MDL锁主要作用是维护表元数据的数据一致性,是为了避免DML语句和DDL冲突,保证读写的正确性。

即是上面所说的场景,客户B在修改表1结构时候就会被阻塞,直到客户A提交了事务才删除成功。

那反过来想一种场景:客户B先开启事务,删除表1结构的一个字段,没有提交;之后客户A查看表1数据。

那按照之前的分析,客户A的查看应该是会被阻塞的,可事实是没有被阻塞。左边的事务还没提交,右边的会话就可以看到左边事务的结果了。

 所以可以想到该修改表结构语句的事务是默认自动提交的,隐式帮我们提交了事务。

有些语句隐式结束当前会话中任何活动的事务,就好像您在执行该语句之前完成了COMMIT一样,这样使用rollback就无效了。

这里要注意的是:是在执行修改表结构语句之前,就隐式提交了事务,不是执行了修改表结构语句后才提交。

接下来就讲讲有哪些语句不能回滚的。

1.DDL(Data Definition Language) 数据定义语言

前面的修改表结构就是DDL语句。

备注:若不了解DDL,可以查看该文章MySQL的SQL语句

所有的 DDL 语句都会导致事务隐式提交。即是当你在执行 DDL 语句前,事务就已经提交了。这就意味着带有 DDL 语句的事务将来没有办法 rollback。

看例子:

在第5步查看结果的时候,发现表和插入的数据都有了,说明回滚没有生效。原因是在第3步,执行DDL语句之前事务就被隐式提交。

DDL语句会进行隐式提交,是不能rollback的,所以大家在日常开发中一定要注意。

建议:最好不要在事务中混有 DDL 语句,DDL 语句和 DML 语句分开写。

为什么DDL语句会隐式提交?
因为DDL是数据定义语言,在我们的数据库中承担着创建,删除和修改的重要的职责。一旦发生问题,带来的后果很可能是不可估量的。于是在每执行完一次后就进行提交,可以保证流畅性,数据不会发生阻塞,同时也会提高数据库的整体性能。

2.DCL(Data Control Language) 数据控制语言

这个语句主要是管理用户,权限所使用的 GRANT、REVOKE 等。

看例子:

步骤5查看数据,显示数据已被修改,说明回滚无效,即在执行DCL语句前事务已隐式提交了。

除了常见的 GRANT 和 REVOKE 之外,其他的创建、更新或者删除用户、修改密码等的操作也会导致事务隐式提交。主要有:

  • CREATE USER…
  • DROP USER…
  • ALTER USER…
  • SET PASSWORD…

 3.在该事务还没提交时开启新事务

一个事务还没提交时,跟着你又开启了一个新的事务,那么此时前一个事务也会隐式提交。

看例子:

4.锁操作

给表上锁、解锁会导致事务隐式提交,全局锁也会导致事务隐式提交。

5.行政声明语句

 ANALYZE TABLE(分析表),CHECK TABLE(检查表是否有错误),FLUSH PRIVILEGES(刷新权限),OPTIMIZE TABLE,REPAIR TALBE(修复表),RESET(用于重置服务器的某些内部状态)。

上述操作也会导致事务的隐式提交。

6.主从复制的从机操作

在从机上执行的一些操作如 start slavestop slavereset slave 以及 change master to 等语句也会隐式提交事务。

7.如何避免出现隐式提交导致的错误

在事务过程中,就只对表数据进行增删改查

需要对表结构操作的就要等退出事务后再操作。

主要参考来源:MySQL 8.0 参考手册

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

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

相关文章

Nuxt3:useFetch在服务端及客户端重复请求问题

一、问题描述 在页面setup中调用$http.get(封装了useFetch),发现不仅在服务端发送了接口请求,而且在客户端也重新发送了一遍接口请求,造成资源浪费及页面加载缓慢。 二、问题原因 首先看一下Nuxt 的useFetch文档&…

高光谱遥感学习入门丨高光谱数据处理基础、Python和Matlab高光谱遥感数据处理

目录 ①Python高光谱遥感数据处理与高光谱遥感机器学习方法深度应用 ②Matlab高光谱遥感、数据处理与混合像元分解实践技术应用 ③高光谱遥感数值建模技术及在植被、水体、土壤信息提取领域应用 更多应用 高光谱遥感信息对于我们认识世界具有重要意义。尽管大部分物质在人眼…

(C语言)qsort函数详解

目录 1. qsort解释 2. qsort实例 2.1 qsort排列整形数组类型: 2.2 qsort排列结构体类型数据(字符串): 2.3 qsort排列结构体类型数据(整形): 1. qsort解释 我们可以进入网站:qso…

局域网如何远程?

局域网远程一直是许多用户在处理远程连接需求时面临的一个难题。随着技术的不断进步,一种名为“天联”的组网解决方案应运而生。天联组网具有操作简单、跨平台应用、无网络要求以及独创的安全加速方案等独特优势,在解决各行业客户的远程连接需求方面发挥…

【JAVA重要知识 | 第二篇】一篇文章读懂Java锁机制(含CAS思想、AQS机制)

文章目录 2.一篇文章读懂Java常用的锁机制2.1锁介绍2.1.1定义2.1.2相关概念 2.2锁的种类2.2.1按功能层面分(1)共享锁/排他锁/读写锁 2.2.2按性能和线程安全分(1)乐观锁/悲观锁(2)偏向锁/轻量级锁(自旋锁)/重…

盘点:国家智能算力中心

文章目录 1. Main2. My thoughtsReference 1. Main 按照《中国算力白皮书(2022年)》的定义,算力主要分为四部分:通用算力、智能算力、超算算力、边缘算力。通用算力以CPU芯片输出的计算能力为主;智能算力以GPU、FPGA、…

如何本地创建websocket服务端并发布到公网实现远程访问

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

使用easyexcel填充模板数据,并导出excel

文章目录 前言一、制作模板二、前端代码三、后端代码总结 前言 导出excel功能非常场景,本片文章记录如何使用模板填充数据后再导出。因直接导出excel数据样式不符合要求,所以做了模板填充然后再导出excel。 效果如下: 一、制作模板 注意&a…

2024年腾讯云服务器优惠券领取入口及使用教程

随着云计算技术的不断发展,越来越多的企业和个人选择将业务迁移到云端。腾讯云作为国内领先的云计算服务提供商,为了吸引用户上云,经常推出多种优惠活动,其中就包括服务器优惠券,本文将为大家分享腾讯云服务器优惠券的…

华为配置基于VLAN限速示例

华为配置基于VLAN限速示例 组网图形 图1 流量监管配置组网图 表1 Switch为上行流量提供的QoS保障 流量类型 CIR(kbps) PIR(kbps) DSCP优先级 语音 2000 10000 46 视频 4000 10000 30 数据 4000 10000 14 ^^^ 流分类简介配置注意事项组网需求配置思路操作步…

恒峰-智能高压森林应急消防泵:守护森林安全的绿色战士

在茂密的森林中,每一棵树木都是大自然的精灵,它们为我们提供氧气、净化空气、保持水土,是地球上不可或缺的生命之源。然而,当火灾肆虐时,这些树木也会成为我们的噩梦。为了保护森林资源,我们需要一种高效、…

TikTok外贸系统的核心功能及其源代码分享!

随着全球化的不断推进,外贸业务成为越来越多企业的增长动力,TikTok作为一个全球性的社交媒体平台,其用户基数庞大、活跃度高,为外贸业务提供了无限的商机。 为了帮助企业在TikTok上更好地开展外贸业务,TikTok外贸系统…

数据持久层框架:MyBatis

数据持久层框架:MyBatis 前言入门SqlSessionFactorySqlSession作用域(Scope)和生命周期 配置properties(属性)settings(设置)typeAliases(别名)typeHandlers(…

Deep Learning相关概念介绍

工具: Anaconda: anaconda.com/products/individual。我理解是一个基于Python的AI程序开发环境,其作用类似于google notebook。区别是google notebook是在网页上,而Anaconda一般是安装在自己的服务器上。Jupyter Notebooks Anaconda激活深度…

Linux - 安装 maven(详细教程)

目录 一、下载二、安装三、配置环境变量四、镜像资源配置 一、下载 官网:https://maven.apache.org/download.cgi 打开 maven 的官网下载页面,点击 bin.tar.gz 文件链接 即可下载最新版本的 maven 如果想要下载旧版本的 meven,则点击 Maven…

JavaScript中call和apply函数方法

看下下面这个代码示例: javascript const lufthansa {airline: Lufthansa,iataCode: LH,bookings: [],book(flightNum, name) {console.log(${name} booked a seat on ${this.airline} flight ${this.iataCode}${flightNum});}, };lufthansa.book(239, ‘IT知识一…

python实现有限域GF(2^8)上的乘法运算

有限域GF(2^8)上的乘法运算可以看成多项式的乘法 5e转换成二进制为0101 1110,对应的多项式为x^6x^4x^3x^2x 3f转换成二进制为0011 1111,对应的多项式为x^5x^4x^3x^2x1 将这两个多项式相乘再模多项式x^8x^4x^3x1得到结果为1110 0101,转换为…

【扩散模型】生成模型中的Residual Self-Attention UNet 以及 DDPM的pytorch代码

参考: [1] https://github.com/xiaohu2015/nngen/blob/main/models/diffusion_models/ddpm_cifar10.ipynb [2] https://www.bilibili.com/video/BV1we4y1H7gG/?spm_id_from333.337.search-card.all.click&vd_source9e9b4b6471a6e98c3e756ce7f41eb134 TOC 1 UNe…

Vue3+vite+vant UI移动端项目创建保姆级教程

项目创建 创建Vue3项目 npm create vue@latestcd shoujihao-h5npm installnpm run formatnpm run dev修改端口 vue3 默认端口5173 想要把端口号修改为8088,在vite.config.js中写入 server: {port: 8088,//端口号host: true,//ip地址 或 0.0.0.0 或 "loaclhost"o…

OSCP靶场--Walla

OSCP靶场–Walla 考点(1.hydra http基本认证爆破: 2.sudo -l:python导入外部模块提权 3.Linux内核提权:cve-2021-4034) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.181.97 --min-rate 2000 Starting N…