MySQL中关于事务和锁的常见执行命令整理包括版本区别

MySQL中关于事务的常见执行命令实例整理,并标注了不同版本下的区别(如MySQL 8.0与旧版本的差异):


一、事务相关命令

1. 事务控制
命令描述版本差异
START TRANSACTION;BEGIN;显式开启事务通用语法,无版本差异。
COMMIT;提交事务,使更改永久生效通用语法,无版本差异。
ROLLBACK;回滚事务,撤销未提交的更改通用语法,无版本差异。
SAVEPOINT 保存点名称;设置事务保存点通用语法,无版本差异。
ROLLBACK TO 保存点名称;回滚到指定保存点通用语法,无版本差异。
2. 自动提交设置
命令描述版本差异
SHOW VARIABLES LIKE 'autocommit';查看自动提交状态通用语法,无版本差异。
SET @@autocommit = 0/1;SET autocommit = OFF/ON;开启/关闭自动提交通用语法,无版本差异。
3. 事务隔离级别
命令描述版本差异
SET SESSION TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE};设置事务隔离级别通用语法,无版本差异。默认为 REPEATABLE READ
4. 示例事务
-- 转账事务示例
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

二、锁相关命令

1. 共享锁与排他锁
命令描述版本差异
SELECT ... LOCK IN SHARE MODE;手动获取共享锁(允许其他事务读,但禁止写)MySQL 8.0之前使用此语法。
SELECT ... FOR SHARE;MySQL 8.0+ 的优化版共享锁写法MySQL 8.0+ 新增,替代 LOCK IN SHARE MODE
SELECT ... FOR UPDATE;手动获取排他锁(禁止其他事务读和写)通用语法,无版本差异。
2. 表级锁
命令描述版本差异
LOCK TABLES 表名 READ;获取表级共享锁(只读)通用语法,无版本差异。
LOCK TABLES 表名 WRITE;获取表级排他锁(独占写)通用语法,无版本差异。
UNLOCK TABLES;释放表锁通用语法,无版本差异。
3. 全局锁
命令描述版本差异
FLUSH TABLES WITH READ LOCK;获取全局读锁(全库备份场景)通用语法,无版本差异。
UNLOCK TABLES;释放全局锁通用语法,无版本差异。
4. 特殊锁类型
命令描述版本差异
SELECT ... FOR UPDATE;行级排他锁(InnoDB默认行为)通用语法,无版本差异。
SELECT ... FOR UPDATE SKIP LOCKED;跳过被锁定的行(MySQL 8.0+)MySQL 8.0+ 新增。
SELECT ... FOR UPDATE WAIT n;等待锁超时(MySQL 8.0+)MySQL 8.0+ 新增,n 为等待秒数。
5. 死锁检测
命令描述版本差异
SELECT * FROM information_schema.innodb_lock_waits;查看死锁信息通用语法,无版本差异。
6. 乐观锁
命令描述版本差异
UPDATE 表名 SET version = version + 1 WHERE 条件 AND version = 期望值;乐观锁模式(基于版本号)通用语法,无版本差异。

三、版本差异总结

MySQL 8.0 的改进
  1. 共享锁语法优化

    • 旧版本SELECT ... LOCK IN SHARE MODE;
    • MySQL 8.0+SELECT ... FOR SHARE;(推荐使用)。
  2. 排他锁扩展功能

    • MySQL 8.0+ 支持 SELECT ... FOR UPDATE SKIP LOCKEDSELECT ... FOR UPDATE WAIT n,提供更灵活的锁控制。
  3. 自增锁优化

    • MySQL 8.0+ 使用轻量级互斥量替代传统表级锁,提升并发性。
旧版本兼容性
  • MySQL 5.7及以下
    • 必须使用 LOCK IN SHARE MODE 实现共享锁。
    • 不支持 SKIP LOCKEDWAIT n 等高级锁功能。
    • 自增锁(AUTO-INC Lock)为传统表级锁,可能影响并发性能。

四、锁类型与事务隔离级别的关联

  1. 间隙锁(Gap Lock)

    • 生效条件:仅在 REPEATABLE READ 隔离级别下生效(默认)。
    • 命令触发:范围查询(如 SELECT ... FOR UPDATE WHERE id BETWEEN 10 AND 20)。
  2. 临键锁(Next-Key Lock)

    • 作用:防止幻读(默认在 REPEATABLE READ 下生效)。
    • 触发场景SELECT ... FOR UPDATEUPDATE 操作。
  3. 插入意向锁(Insert Intention Lock)

    • 作用:允许多个事务同时插入同一间隙的不同位置。
    • 版本要求:通用语法,无版本差异。

五、锁查看与调试

命令描述版本差异
SHOW OPEN TABLES WHERE In_use > 0;查看当前被锁的表通用语法,无版本差异。
SHOW ENGINE INNODB STATUS;查看InnoDB锁状态和死锁信息通用语法,无版本差异。

六、示例场景

场景1:高并发转账操作
-- MySQL 8.0+
START TRANSACTION;
SELECT * FROM accounts WHERE id = 1 FOR SHARE; -- 共享锁
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
场景2:避免幻读
-- MySQL 8.0+
START TRANSACTION;
SELECT * FROM orders WHERE status = 'pending' FOR UPDATE; -- 临键锁防止插入新数据
-- 执行业务逻辑
COMMIT;

以上命令和版本差异总结基于MySQL 5.7及8.0的特性,实际使用时需结合具体版本文档验证。

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

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

相关文章

PyTorch-Transforms的使用(二)

对图像进行处理 安装open cv ctrlP 看用法 ToTensor的使用 常见的Transforms 归一化的图片 两个长度为三的数组,分别表示三个通道的平均值和标准差 Resize() Compose() 合并执行功能,输入进去一个列表&a…

vscode实用配置

前端开发安装插件: 1.可以更好看的显示文件图标 2.用户快速打开文件 使用步骤:在html文件下右键点击 open with live server 即可 刷力扣: 安装这个插件 还需要安装node.js即可

Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合

Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合 17.电话号码的字母组合 17. 电话号码的字母组合 - 力扣(LeetCode) 思路: 笔者用index代替i,这里的index其实就是digits数组的下标 按照灵神的回溯三问,那就…

深入理解JavaScript设计模式之闭包与高阶函数

前言小序 一场失败面试 2023年的某一天,一场让我印象深刻的面试: 面试官: “你了解闭包吗?请说一下你对闭包的理解。” 我自信满满地答道: “闭包就是函数里面套函数,里面的函数可以访问外部函数的变量。…

使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库

在现代的 Java 应用开发中,Spring Boot 提供了强大的工具来简化数据库操作。JdbcTemplate 是 Spring 提供的一个核心类,用于简化 JDBC 操作,减少样板代码。本文将介绍如何在 Spring Boot 3.3 项目中使用 JdbcTemplate 来操作 MySQL 数据库&am…

如何做好一份技术文档?(下篇)

如何做好一份技术文档?(下篇) 下篇:文档体验的极致优化 ——从可用性到愉悦性的跨越 文档用户体验地图 新手路径 专家路径 [安装] → [配置] → [示例] [API] → [参数] → [源码] │ ▲ …

Windows 12确认没了,Win11 重心偏移修Bug

微软悄然搁置了传说中的Windows 12开发计划,转身将精力投入到Windows 11的持续进化中。今年秋季的主角已经确定——Windows 11 25H2,它将于9月或10月间与我们正式见面。 与去年24H2的大规模更新不同,25H2更像是场精心策划的“功能解锁”。微软…

JavaScript中的正则表达式:文本处理的瑞士军刀

JavaScript中的正则表达式:文本处理的瑞士军刀 在编程世界中,正则表达式(Regular Expression,简称RegExp)被誉为“文本处理的瑞士军刀”。它能够高效地完成字符串匹配、替换、提取和验证等任务。无论是前端开发中的表…

基于LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用

在国家“3060”碳达峰碳中和的政策背景下,如何寻求经济-能源-环境的平衡有效发展是国家、省份、城市及园区等不同级别经济体的重要课题。根据国家政策、当地能源结构、能源技术发展水平以及相关碳排放指标制定合理有效的低碳能源发展规划需要以科学准确的能源环境发…

Python爬虫实战:研究RoboBrowser库相关技术

1. 引言 1.1 研究背景与意义 随着电子商务的快速发展,商品信息呈现爆炸式增长。据 Statista 数据显示,2025 年全球电子商务销售额预计将达到 7.4 万亿美元,海量的商品数据蕴含着巨大的商业价值。对于电商企业而言,及时获取竞争对手的产品信息、价格动态和用户评价,能够帮…

JVM垃圾回收器-ZGC

一、概述 ZGC(Z Garbage Collector)是一种高效且可扩展的低延迟垃圾回收器。在垃圾回收过程中,ZGC通过优化算法和硬件支持,将Stop-The-World(STW)时间控制在一毫秒以内,使其成为追求低延迟应用…

区间动态规划

线性 DP 的一种,简称为「区间 DP」。以「区间长度」划分阶段,以两个坐标(区间的左、右端点)作为状态的维度。一个状态通常由被它包含且比它更小的区间状态转移而来。 一、概念 间 DP 的主要思想就是:先在小区间内得到…

4. 数据类型

4.1 数据类型分类 分类 数据类型 说明 数值类型 BIT(M) 位类型。M指定位数,默认值1,范围1 - 64 TINYINT [UNSIGNED] 带符号的范围 -128 ~ 127,无符号范围0 ~ 255,默认有符号 BOOL 使用0和1表示真和假 SMALLINT [UNSIGNED] 带符号是…

设计模式-2 结构型模式

一、代理模式 1、举例 海外代购 2、代理基本结构图 3、静态代理 1、真实类实现一个接口,代理类也实现这个接口。 2、代理类通过真实对象调用真实类的方法。 4、静态代理和动态代理的区别 1、静态代理在编译时就已经实现了,编译完成后代理类是一个实际…

vue+element-ui一个页面有多个子组件组成。子组件里面有各种表单,实现点击enter实现跳转到下一个表单元素的功能。

一个父组件里面是有各个子组件的form表单组成的。 我想实现点击enter。焦点直接跳转到下一个表单元素。 父组件就是由各个子组件构成 子组件就像下图一样的都有个el-form的表单。 enterToTab.js let enterToTab {}; (function() {// 返回随机数enterToTab.addEnterListener …

Open SSL 3.0相关知识以及源码流程分析

Open SSL 3.0相关知识以及源码流程分析 编译 windows环境编译1、工具安装 安装安装perl脚本解释器、安装nasm汇编器(添加到环境变量)、Visual Studio编译工具 安装dmake ppm install dmake # 需要过墙2、开始编译 # 1、找到Visual Studio命令行编译工具目录 或者菜单栏直接…

【Redis】笔记|第5节|Redisson实现高并发分布式锁核心源码

一、加锁流程 1. 核心方法调用链 RLock lock redisson.getLock("resource"); lock.lock(); // 阻塞式加锁↳ lockInterruptibly()↳ tryAcquire(-1, leaseTime, unit) // leaseTime-1表示启用看门狗↳ tryAcquireAsync()↳ tryLockInnerAsync() // 执行Lua脚本 2…

基于React + TypeScript构建高度可定制的QR码生成器

前言 在现代Web应用中,QR码已成为连接线上线下的重要桥梁。本文将详细介绍如何使用React TypeScript Vite构建一个功能强大、高度可定制的QR码生成器,支持背景图片、文本叠加、HTML模块、圆角导出等高级功能。 前往试试 项目概述 技术栈 前端框架:…

【MATLAB代码】制导——三点法,二维平面下的例程|运动目标制导,附完整源代码

三点法制导是一种导弹制导策略,主要用于确保导弹能够准确追踪并击中移动目标。该方法通过计算导弹、目标和制导站之间的相对位置关系,实现对目标的有效制导。 本文给出MATLAB下的三点法例程,模拟平面上捕获运动目标的情况订阅专栏后可直接查看源代码,粘贴到MATLAB空脚本中即…

Ubuntu22.04 安装 IsaacSim 4.2.0

1. 从官网下载 IsaacSim 4.2.0 安装包 https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone%404.2.0-rc.18%2Brelease.16044.3b2ed111.gl.linux-x86_64.release.zip 2. 查阅 Workstation Installation 安装方式 Workstation Installation — Isaac Sim Do…