当前位置: 首页 > news >正文

MySQL 事务(Transaction)详解

MySQL 事务(Transaction)详解


1. 什么是事务?

事务(Transaction)是一组要么全部执行,要么全部回滚的 SQL 语句,用于保证数据一致性。事务一般用于银行转账、订单支付等操作,确保多个步骤要么全部成功,要么全部失败。

事务的特点(ACID):

  1. 原子性(Atomicity):事务是一个不可分割的最小操作单位,要么全部执行,要么全部回滚。
  2. 一致性(Consistency):事务执行后,数据库必须保持一致状态。
  3. 隔离性(Isolation):多个事务并发执行时,相互之间不会影响。
  4. 持久性(Durability):事务提交后,对数据库的更改是永久性的。

2. 事务的基本操作

在 MySQL 中,事务通常用 START TRANSACTIONBEGIN 开始,COMMIT 提交,ROLLBACK 回滚:

-- 开启事务
START TRANSACTION;-- 执行 SQL 语句
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;-- 提交事务(数据永久生效)
COMMIT;

如果中途发生错误,可以回滚:

-- 开启事务
START TRANSACTION;-- 执行 SQL 语句
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
-- 发生错误,回滚事务
ROLLBACK;

3. 事务的隔离级别

MySQL 事务的隔离级别影响并发事务的执行方式,常见隔离级别:

隔离级别脏读不可重复读幻读默认值
READ UNCOMMITTED(读未提交)❌ 可能❌ 可能❌ 可能
READ COMMITTED(读已提交)✅ 避免❌ 可能❌ 可能
REPEATABLE READ(可重复读)✅ 避免✅ 避免❌ 可能✅(MySQL 默认)
SERIALIZABLE(串行化)✅ 避免✅ 避免✅ 避免

如何设置隔离级别?

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

4. 事务的常见问题

(1)脏读(Dirty Read)

发生在 READ UNCOMMITTED 级别:一个事务能读取另一个未提交事务的数据,如果对方回滚,读取的数据就是无效的。

-- 事务 A
START TRANSACTION;
UPDATE accounts SET balance = 500 WHERE user_id = 1;
-- 此时事务 A 还未提交-- 事务 B
SELECT balance FROM accounts WHERE user_id = 1; -- 读取到了未提交的值

解决方案:使用 READ COMMITTED 以上隔离级别。


(2)不可重复读(Non-Repeatable Read)

发生在 READ COMMITTED 级别:同一个事务多次读取数据,发现数据不一致(另一事务修改了数据并提交)。

-- 事务 A
START TRANSACTION;
SELECT balance FROM accounts WHERE user_id = 1; -- 读取值 500-- 事务 B(修改后提交)
UPDATE accounts SET balance = 600 WHERE user_id = 1;
COMMIT;-- 事务 A(再次读取)
SELECT balance FROM accounts WHERE user_id = 1; -- 发现变成 600

解决方案:使用 REPEATABLE READ 以上隔离级别。


(3)幻读(Phantom Read)

发生在 REPEATABLE READ 级别:事务中多次查询,发现新增的行。

-- 事务 A
START TRANSACTION;
SELECT COUNT(*) FROM orders WHERE user_id = 1; -- 10 条数据-- 事务 B(插入新数据并提交)
INSERT INTO orders(user_id, amount) VALUES (1, 100);
COMMIT;-- 事务 A(再次查询)
SELECT COUNT(*) FROM orders WHERE user_id = 1; -- 发现 11 条数据

解决方案:使用 SERIALIZABLE 级别,防止新数据插入。


5. InnoDB 与 MyISAM 事务支持

存储引擎事务支持适用场景
InnoDB✅ 支持事务适合高并发、数据一致性要求高的系统,如金融、订单
MyISAM❌ 不支持事务适合读取操作多的场景,如 CMS 系统

如何查看表的存储引擎?

SHOW TABLE STATUS WHERE Name = 'my_table';

6. MySQL 事务最佳实践

  1. 尽量使用 InnoDB,保证事务支持。
  2. 缩小事务范围,避免长时间锁表影响性能。
  3. 避免事务嵌套,减少锁竞争。
  4. 使用索引优化查询,减少锁的范围,提高并发效率。
  5. 发生错误时记得 ROLLBACK,确保数据一致性。
  6. 适当选择隔离级别,根据业务需求权衡并发性和数据一致性。

7. 事务相关的 SQL 语句

操作SQL 语句
开启事务START TRANSACTION;BEGIN;
提交事务COMMIT;
回滚事务ROLLBACK;
设置隔离级别SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
查看当前事务隔离级别SELECT @@TRANSACTION_ISOLATION;

8. 总结

  • 事务保证 ACID,保证数据库的一致性。
  • MySQL 事务隔离级别决定数据并发访问时的行为,REPEATABLE READ 是 MySQL 默认隔离级别。
  • 事务的三大问题:脏读、不可重复读、幻读,可通过不同的隔离级别解决。
  • InnoDB 支持事务,MyISAM 不支持
  • 务必在事务结束后 COMMITROLLBACK,防止事务长时间占用资源。

相关文章:

MySQL 事务(Transaction)详解

MySQL 事务(Transaction)详解 1. 什么是事务? 事务(Transaction)是一组要么全部执行,要么全部回滚的 SQL 语句,用于保证数据一致性。事务一般用于银行转账、订单支付等操作,确保多个…...

Redis 知识点梳理

第一章 NoSQL数据库发展历史简介 1、 Web的历史发展历程 web1.0时代简介 web 1.0是以编辑为特征,网站提供给用户的内容是网站编辑进行编辑处理后提供的,用户阅读网站提供的内容这个过程是网站到用户的单向行为web1.0时代的代表站点为新浪,…...

github上传操作简单说明

前期准备 0.下载git(如果已经有了就不用了) 1.在GitHub上新建一个存储库 2.先在本地创建一个目录作为本地库目录,在目录里打开git bash进行上传 上传过程 echo "# Garbled_repair" >> README.md 作用:创建一个…...

在 ASP .NET Core 9.0 中使用 Scalar 创建漂亮的 API 文档

示例代码:https://download.csdn.net/download/hefeng_aspnet/90407900 Scalar 是一款可帮助我们为 API 创建精美文档的工具。与感觉有些过时的默认 Swagger 文档不同,Scalar 为 API 文档提供了全新而现代的 UI。其简洁的设计让开发人员可以轻松找到测试…...

针对 pdf.mjs 文件因 MIME 类型错误导致的 Failed to load module script 问题解决方案

Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “application/octet-stream”. Strict MIME type checking is enforced for module scripts per HTML spec. pdf.mjs 这种问题该如何处理 nginx 针对 pdf.…...

Flink介绍与安装

Apache Flink是一个在有界数据流和无界数据流上进行有状态计算分布式处理引擎和框架。Flink 设计旨在所有常见的集群环境中运行,以任意规模和内存级速度执行计算。 一、主要特点和功能 1. 实时流处理: 低延迟: Flink 能够以亚秒级的延迟处理数据流,非常…...

《双指针算法指南:LeetCode 经典题解(C++实现)》

《双指针算法指南:LeetCode 经典题解(C实现)》 —— 从快慢指针到对撞指针,刷题效率提升 200%! 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 对撞指针: ⼀般⽤于顺…...

kaggle上经典泰坦尼克项目数据分析探索

之前了解在kaggle上这个项目很火,最近想要加强一下python数据分析,所以在kaggle上找到这个项目进行学习探索,下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…...

【深度学习】多目标融合算法(五):定制门控网络CGC(Customized Gate Control)

目录 一、引言 二、CGC(Customized Gate Control,定制门控网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、引言 上一…...

Ubuntu上查看GPU使用情况并释放内存

先用nvidia-smi查看GPU当前使用情况 再用fuser 命令查找对应显卡上占用 GPU 的进程 最后查到了用kill -9强制杀掉进程(PID)即可...

大数据学习栈记——HBase安装

本文介绍大数据技术中流行的非关系型数据库HBase的安装,操作系统:Ubuntu24.04 安装Zookeeper 安装HBase前需要先安装Zookeeper,HBase使用Zookeeper作为其分布式协同服务,存储了HBase集群的元数据信息,并提供了分布式…...

[入门]NUC13配置Ubuntu20.04详细步骤

文章目录 1. 安装Ubuntu20.041.1 制作系统启动盘1.1.1 下载镜像文件1.1.2 配置启动盘 1.2 安装内存条、硬盘1.3 安装系统 2. 网卡驱动配置2.1 关闭安全启动2.2 安装intel官方网卡驱动backport2.2.1 第四步可能会出现问题 2.3 ubuntu官方的驱动2.4 重启 3. 软件安装3.1 录屏软件…...

【实战指南】用MongoDB存储文档和图片等大文件(Java实现)

一、前言 在现代应用开发中,经常需要处理和存储大量的文档、图片等大文件。传统的关系型数据库在处理这类大文件时,往往会面临性能瓶颈、存储成本高等问题。而 MongoDB 作为一款流行的 NoSQL 数据库,提供了 GridFS 规范,能够很好地解决大文件存储的问题。GridFS 可以将大文…...

使用Gitee Go流水线部署个人项目到服务器指南

使用Gitee Go流水线部署个人项目到服务器指南 前言!!! 本文解决的问题: 你有一台ECS服务器,你在上面部署了一个Java服务也就是一个jar,你觉着你每次手动本地打包,上传,在通过命令去…...

使用Three.js渲染器创建炫酷3D场景

引言 在当今数字化的时代,3D图形技术正以其独特的魅力在各个领域掀起波澜。从影视制作到游戏开发,从虚拟现实到网页交互,3D场景以其强烈的视觉冲击力和沉浸式的体验,成为了吸引用户、传达信息的重要手段。而Three.js,…...

Spring Boot 集成 Elasticsearch怎样在不启动es的情况下正常启动服务

解释 在spingboot 集成es客户端后,每当服务启动时,服务默认都会查看es中是否已经创建了对应的索引,如果没有索引则创建。基于上面的规则我们可以通过配置不自动创建索引来达到在没有es服务的情况下正常启动服务。 解决办法 在entity类的Docu…...

明远智睿SD2351核心板:多接口融合,破解边缘计算难题

在边缘计算领域,明讯智睿SD2351核心板凭借丰富的接口资源与异构计算架构,成为工业网关与智能终端的理想选择。硬件配置升级 :处理器:四核Cortex-A35,256KB L2缓存,动态调频降低功耗;存储性能:emMC 5.0 HS400模式读写速度提升40%&a…...

xampp安装教程与配置

一、安装 XAMPP (一)下载 访问官网:打开浏览器,访问 XAMPP 官方网站(https://www.apachefriends.org/zh_cn/index.html)。 选择版本:根据你的操作系统(Windows、macOS 或 Linux&am…...

设计模式之单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是一种常用的设计模式,确保一个类只有一个实例,并提供一个全局访问点。单例模式在许多场景中非常有用,例如配置管理、日志记录、线程池等。 ### **1. 单例模式的特点** 1. **唯一实例**&a…...

Androidstudio实现引导页文字动画

文章目录 1. 功能需求2. 代码实现过程1. 编写布局文件2. 实现引导页GuideActivity 3. 总结4. 效果演示5. 关于作者其它项目视频教程介绍 1. 功能需求 1、引导页具有两行文字(“疫情在前”和“共克时艰”),和向上的 图标。 2、进入【引导页】…...

【linux】线程概念与控制

引言 当现代CPU的晶体管密度逼近物理极限,多核架构已成为突破性能瓶颈的必由之路。在这个计算密集型任务与异步IO需求并行的时代,多线程编程不再是可选项,而是开发者必须掌握的核心技能。Linux作为承载着全球90%云计算负载的操作系统&#xf…...

Cesium 自定义路径导航材质

cesium 自定义路径导航纹理图片随便更换,UI 提供设计图片即可达到效果; 打开小马的weix 关注下 搜索“技术链” 回复关键词《《路径》》获取原始代码; 拿到就能用轻松解决!帮忙点个关注吧!...

用 pytorch 从零开始创建大语言模型(五):预训练无标注数据

用 pytorch 从零开始创建大语言模型(五):预训练无标注数据 5 预训练无标注数据5.1 评估文本生成模型5.1.1 使用 GPT 生成文本5.1.2 计算文本生成损失5.1.3 计算训练集和验证集的损失 5.2 训练 LLM5.3 解码策略以控制随机性5.3.1 温度缩放&am…...

[AI速读]混合验证方案:如何高效解决RISC-V向量扩展的验证难题

RISC-V作为一种开源指令集架构,近年来在AI和高性能计算领域备受关注。其向量扩展(RVV)为处理并行数据提供了强大的支持,但复杂的异常处理和冒险检测机制也带来了验证上的巨大挑战。本文将结合一篇技术论文,解析一种混合验证方案,帮助开发者更高效地解决RVV的验证问题。 一…...

模型空间、图纸空间、布局(Layout)之间联系——CAD c#二次开发

在 AutoCAD 的二次开发中,**模型空间(Model Space)**、**图纸空间(Paper Space)** 和 **布局(Layout)** 是三个核心概念,它们的关系及开发中的操作逻辑如下: --- 1. 模…...

Linux 日常开发常用命令(解释-全)

帮助类 #查看cd命令的帮助信息 [rootcentos100 ~] help cd # 查看网卡配置信息 [rootcentos100 ~] ifconfig # 检测到目标主机是否连接正常 [rootcentos100 ~] ping IP地址[rootcentos100 ~] ssh [-p port] userremote #远程登录user 是在远程机器上的用户名,如果…...

数据库监控:确保业务连续性和用户体验

在数字化时代,数据库作为企业的数据心脏,其重要性不言而喻。无论是交易系统、客户关系管理系统,还是数据分析平台,都离不开数据库的支撑。然而,数据库的运行状态和性能直接影响着企业的业务连续性和用户体验。因此&…...

Java面试黄金宝典9

1. Redis 持久化机制 Redis 提供了两种主要的持久化机制:RDB(Redis Database)和 AOF(Append Only File),下面对这两种机制进行详细介绍。 RDB(Redis Database) 原理:RDB …...

【C#】WinForm自定义控件及窗体

前言 WinForm(Windows Forms)是Microsoft.NET框架中的技术,用于开发Windows桌面应用程序。它提供了一套丰富的控件和组件。通过拖放控件、编写事件处理程序等方式快速构建用户界面。 通过属性窗口定制这些控件的外观和行为。 通过数据绑定&am…...

VideoHelper 油猴脚本,重塑你的视频观看体验

VideoHelper 油猴脚本,重塑你的视频观看体验 在日常上网看视频时,你是否也被这些问题困扰:视频网站开头的广告又臭又长,找个合适的播放倍速要在一堆选项里翻半天,每次手动调音量、点全屏按钮繁琐又影响沉浸感&#xf…...

从收藏夹到知识图谱:书签管理器如何重塑你的信息获取方式?

在信息爆炸的今天,浏览器收藏夹早已沦为 “数字垃圾堆”—— 杂乱无章的网址、重复的标签、过期的链接,不仅降低效率,更成为信息焦虑的源头。智能书签管理器通过AI分类、跨平台同步、隐私保护等黑科技,重塑您的数字生活方式。书签…...

SOFABoot-07-版本查看

前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…...

[极客大挑战 2019]Http_3.19BUUCTF练习day3(1)

BUUCTF练习day3(1)_[极客大挑战 2019]Http 打开靶场,查看源码(如果在做题时没有什么发现就查看源码) 打开Secret.php提示没有来自https://Sycsecret.buuoj.cn 添加Referer头为https://Sycsecret.buuoj.cn(提示说我们没有来自那个网址,那我们…...

golang Error的一些坑

golang Error的一些坑 golang error的设计可能是被人吐槽最多的golang设计了。 最经典的err!nil只影响代码风格设计,而有一些坑会导致我们的程序发生一些与我们预期不符的问题,开发过程中需要注意。 ​​ errors.Is​判断error是否Wrap不符合预期 ​…...

弱网测试:全链路实战、高阶策略与自动化落地

在移动互联网时代,网络环境的不确定性成为用户体验的“隐形杀手”。弱网测试不仅是质量保障的必备环节,更是提升用户留存率和业务转化率的战略手段。 本文将从 工具链深度配置、复杂场景模拟、性能优化底层逻辑 和 自动化流水线集成 四个维度,彻底解析弱网测试的完整方法论…...

Ubuntu检查并启用 Nginx 的stream模块或重新安装支持stream模块的Nginx

stream 模块允许 Nginx 处理 TCP 和 UDP 流量,常用于负载均衡和端口转发等场景。本文将详细介绍如何检查 Nginx 是否支持 stream 模块,以及在需要时如何启用该模块。 1. 检查 Nginx 是否支持 stream 模块 首先,需要确认当前安装的 Nginx 是…...

mac brew 安装的php@7.4 打开redis扩展

1. 找到php7.4的pecl目录 一般在这个位置 cd /usr/local/Cellar/php7.4/7.4.33_8/pecl/20190902 ls 一下 有个 redis.so 于是 直接去php.ini编辑了 php.ini的路径 vim /usr/local/etc/php/7.4/php.ini 把938行添加进去 然后重启一下 php7.4 brew services restart ph…...

Redis 内存管理

Redis 内存管理 1. Redis 给缓存数据设置过期时间的作用 给缓存数据设置过期时间(TTL, Time-To-Live)有以下几个重要作用: (1) 自动释放内存 避免缓存数据无限增长,导致 Redis 内存溢出。例如,在 会话管理、短连接…...

学习CSS滤镜属性 `filter: invert()`

一、核心机制 数学原理 invert(1) 对每个像素的RGB通道执行 颜色反相计算: 新通道值 255 - 原通道值 例如 rgb(255,0,0)(纯红)会转换为 rgb(0,255,255)(青色)。 透明度处理 该滤镜会保留元素的Alpha通道(…...

网络空间安全专业发展历程及开设院校

一、专业发展历程 1. 早期探索阶段(1990年代末—2000年代初) (1)背景: 1990年代互联网进入中国,计算机病毒、黑客攻击等问题逐渐显现,社会对信息安全人才的需求开始萌芽。 (2&…...

Linux中mutex机制

在Linux中,mutex是一种用于多线程编程的同步机制,用于保护共享资源,防止多个线程同时访问或修改这些资源,从而避免竞态条件的发生。mutex 是“mutual exclusion”的缩写,意为“互斥”。 1. Mutex 的基本概念 互斥锁&…...

Web网页

1.结构与表现分离 HTML用于结构 css用于表现,增加了丰富的样式效果,极大满足了开发者的需求 选择器;用于指定css样式作用的html对象{}选择某个属性 p标签 color;本颜色 font-size:子属性 字大小 font-family;字体 font-…...

Redis 在windows下的下载安装与配置

参考链接:https://developer.aliyun.com/article/1395346 下载 Redis 访问 Redis 下载地址:https://github.com/tporadowski/redis/releases 下载 Redis 时,你可以选择 ZIP 包或 MSI 安装: ZIP包:需要手动解压、初始化、配置和…...

基于随机森林回归预测葡萄酒质量

基于随机森林回归预测葡萄酒质量 1.作者介绍2.随机森林算法与数据集介绍2.1定义2.2核心思想2.3主要步骤2.4数据集介绍 3.算法实现3.1数据加载与探索3.2数据可视化3.3数据预处理(标准化、划分训练/测试集)3.4模型训练与优化(随机森林回归 超参…...

在大数据开发中ETL是指什么?

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字经济时代,数据已成为企业最核心的资产。然而,分散在业务系统、日志文件…...

Centos操作系统安装及优化

Centos操作系统安装及优化 零、环境概述 主机名 centos版本 cpu 内存 Vmware版本 ip地址 test CentOS Linux release 7.6.1810 (Core) 2C 2G 15.5.1 10.0.0.10 一、介质下载 1、7.6版本下载 CentOS7.6标准版下载链接: https://archive.kernel.org/centos-vault/7.6.1810/i…...

2025年03月10日人慧前端面试(外包滴滴)

目录 普通函数和箭头函数的区别loader 和 plugin 的区别webpack 怎么实现分包,为什么要分包webpack 的构建流程变量提升react 开发中遇到过什么问题什么是闭包vue 开发中遇到过什么问题vue中的 dep 和 watcher 的依赖收集是什么阶段什么是原型链react setState 是同…...

NLP高频面试题(十)——目前常见的几种大模型架构是啥样的

深入浅出:目前常见的几种大模型架构解析 随着Transformer模型的提出与发展,语言大模型迅速崛起,已经成为人工智能领域最为关注的热点之一。本文将为大家详细解析几种目前常见的大模型架构,帮助读者理解其核心差异及适用场景。 1…...

【数据结构】栈(Stack)、队列(Queue)、双端队列(Deque) —— 有码有图有真相

目录 栈和队列 1. 栈(Stack) 1.1 概念 1.2 栈的使用(原始方法) 1.3 栈的模拟实现 【小结】 2. 栈的应用场景 1、改变元素的序列 2、将递归转化为循环 3、逆波兰表达式求值 4、括号匹配 5、出栈入栈次序匹配 6、最小栈…...

windows清除电脑开机密码,可保留原本的系统和资料,不重装系统

前言 很久的一台电脑没有使用了,开机密码忘了,进不去系统 方法 1.将一个闲置u盘设置成pe盘(注意,这个操作会清空原来u盘的数据,需要在配置前将重要数据转移走,数据无价,别因为配置这个丢了重…...