MySQL数据库进阶应用(1)—事务管理
本文围绕MySQL数据库的四个进阶主题展开整理涵盖事务管理的ACID特性与隔离级别、视图的创建与使用规则、用户权限的授予与回收以及通过C语言API连接MySQL的完整流程。一、事务管理1.1 事务的引入1并发场景下的数据问题在多客户端同时访问数据库的场景中如果对增删改查操作不加控制容易引发数据不一致。以火车票售票系统为例tickets表中存有余票信息客户端A和客户端B几乎同时查询到剩余票数大于0各自执行卖票逻辑并更新余票。2事务的定义事务是一组逻辑上存在相关性的DML语句这些语句要么全部成功执行要么全部失败回滚构成一个整体。一个MySQL数据库中可能同时运行多个事务每条事务至少包含一条SQL。如果大家都访问同样的表数据且不加保护就容易出现并发问题。1.2 ACID特性一个完整的事务需要满足四个属性简称ACID属性英文说明原子性Atomicity事务中的所有操作要么全部完成要么全部不执行不会结束在中间环节。一致性Consistency事务开始之前和结束以后数据库的完整性没有被破坏写入的数据符合所有预设规则。隔离性Isolation数据库允许多个并发事务同时读写数据隔离性可以防止事务交叉执行导致数据不一致分为不同级别。持久性Durability事务处理结束后对数据的修改是永久的即便系统发生故障也不会丢失。事务被MySQL编写者设计出来本质上是为了简化应用层的编程模型。使用事务时开发者只需关注提交或回滚服务器宕机或并发修改等问题。1.3 事务的版本支持在MySQL中只有使用了InnoDB存储引擎的数据库或表才支持事务MyISAM不支持。可以通过以下命令查看数据库引擎show engines; -- 表格显示 show engines \G -- 行显示执行结果中InnoDB行的Transactions字段为YES表示支持事务MyISAM行的Transactions字段为NO。1.4 事务提交方式事务的提交方式常见的有两种自动提交和手动提交。查看当前自动提交状态show variables like autocommit;默认情况下autocommit的值为ON即每条SQL语句执行后自动提交。SET AUTOCOMMIT0; -- 禁止自动提交 SET AUTOCOMMIT1; -- 开启自动提交1.5 事务常见操作以下操作基于一张简单的银行用户表account表结构如下create table if not exists account( id int primary key, name varchar(50) not null default , blance decimal(10,2) not null default 0.0 )ENGINEInnoDB DEFAULT CHARSETutf8;1保存点与部分回滚开启事务可以使用start transaction或begin推荐使用begin。在事务执行过程中可以通过savepoint创建保存点。begin; -- 开始事务 savepoint save1; -- 创建保存点save1 insert into account values (1, 张三, 100); savepoint save2; -- 创建保存点save2 insert into account values (2, 李四, 10000); select * from account; -- 两条记录都在 rollback to save2; -- 回滚到保存点save2 select * from account; -- 只剩一条记录 rollback; -- 直接回滚到事务开始 select * from account; -- 空表如果没有设置保存点直接使用rollback只能回滚到事务的开始位置。2提交与持久化使用commit提交事务后数据将被持久化到数据库中。begin; insert into account values (1, 张三, 100); commit; -- 提交事务数据持久化对比实验表明未commit时客户端崩溃MySQL会自动回滚commit之后客户端崩溃数据已经持久化不受影响。3单条SQL与事务的关系对于InnoDB引擎每一条DML语句默认都封装成事务并自动提交。当关闭自动提交后单条insert语句如果未手动commit客户端崩溃时数据会回滚而在自动提交开启的状态下单条insert执行后数据已经持久化。结论只要输入begin或start transaction事务便必须通过commit提交才会持久化与是否设置autocommit无关事务可以手动回滚操作异常时MySQL也会自动回滚。1.6 事务隔离级别1隔离性的理解MySQL服务可能同时被多个客户端进程访问访问方式以事务进行。单个事务对用户表现出原子性但多个事务各自执行SQL时仍有可能互相影响比如多个事务同时访问同一张表甚至同一行数据。查看与设置隔离性的命令如下-- 查看 SELECT global.tx_isolation; -- 查看全局隔离级别 SELECT session.tx_isolation; -- 查看会话隔离级别 SELECT tx_isolation; -- 默认同上 -- 设置 SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}; set session transaction isolation level serializable; -- 设置当前会话 set global transaction isolation level READ UNCOMMITTED; -- 设置全局设置当前会话隔离级别只影响当前会话设置全局隔离级别后新起的会话会受到影响。2读未提交读未提交隔离级别下事务可以看到其他事务没有提交的执行结果。在该级别下一个事务在执行中读到另一个执行中事务更新但未commit的数据这种现象叫做脏读。insert和delete操作同样存在脏读问题。3读提交读提交隔离级别下一个事务只能看到其他已经提交的事务所做的改变。这种级别满足了隔离的简单定义但会引起不可重复读同一个事务执行时如果多次select可能得到不同的结果。4可重复读可重复读是MySQL默认的隔离级别。它确保同一个事务在执行中多次读取操作数据时会看到同样的数据行。在该级别下终端A开启事务并更新数据终端B同步开启事务。无论终端A是否commit终端B在自己的事务中多次查询看到的结果都是一致的这就是可重复读。5串行化串行化是事务的最高隔离级别通过强制事务排序使之不可能相互冲突从而解决了幻读问题。它在每个读的数据行上加上共享锁但可能导致超时和锁竞争。客户端A执行select操作时会对数据加共享锁客户端B的update操作会被阻塞进入等待队列直到终端A的事务提交后终端B的update才会继续执行。6隔离级别对比四种隔离级别在脏读、不可重复读、幻读和加锁读方面的对比如下表隔离级别脏读不可重复读幻读加锁读读未提交会发生会发生会发生不加锁读已提交不会会发生会发生不加锁可重复读不会不会不会不加锁串行化不会不会不会加锁隔离级别越严格安全性越高但数据库的并发性能也就越低往往需要在两者之间寻找平衡点。不可重复读的重点在于修改和删除幻读的重点在于新增。1.7 一致性事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。当数据库只包含事务成功提交的结果时数据库处于一致性状态。如果系统运行发生中断某个事务尚未完成而被迫中断而未完成的事务对数据库所做的修改已被写入数据库此时数据库就处于一种不正确的状态。一致性通常通过原子性来保证。1.8 MVCC机制1并发场景分类数据库并发的场景主要有三种读读不存在任何问题也不需要并发控制读写存在线程安全问题可能造成事务隔离性问题如脏读、幻读、不可重复读写写也存在线程安全问题可能存在更新丢失。2记录隐藏字段理解MVCC需要了解三个记录隐藏字段DB_TRX_ID6字节最近修改事务ID记录创建这条记录或最后一次修改该记录的事务ID。DB_ROLL_PTR7字节回滚指针指向这条记录的上一个版本历史版本一般存放在undo log中。DB_ROW_ID6字节隐含的自增ID如果数据表没有主键InnoDB会自动以DB_ROW_ID产生一个聚簇索引。此外还有一个删除flag隐藏字段记录被更新或删除并不代表真的删除而是删除flag发生了变化。3undo日志与版本链undo日志用于保存数据的历史版本。当一条记录被修改时旧版本会被写入undo log中通过DB_ROLL_PTR指针形成一条版本链。当前记录为李四其回滚指针指向undo log中的旧版本张三。事务2在形成快照时从DB_TRX_ID4开始沿着版本链查找根据Read View的可见性规则判断哪个版本对当前事务可见。Read View是事务进行快照读时产生的读视图包含了事务开始时当前系统中所有活跃事务的列表用于判断版本可见性。

相关新闻

软件硬件:个人PC核心硬件全景深度分析

软件硬件:个人PC核心硬件全景深度分析

前言一台完整个人电脑(台式机/笔记本)由核心计算硬件、存储硬件、输入输出硬件、供电散热硬件、板载互联硬件五大模块构成。硬件之间通过总线、接口协同工作,任何一个部件瓶颈都会限制整机性能。本文使用多表格拆解各硬件定位、核心参数、性能…

2026/10/16 6:28:53 阅读更多 →
跳表Skip List原理与C语言实现:构建高效有序映射结构

跳表Skip List原理与C语言实现:构建高效有序映射结构

如果你接手过一个需要常驻内存、按键有序、还要支持范围查询的映射结构,大概率会在选型上纠结一阵:哈希表查询快但无序,有序数组遍历好但插入删除要搬数据,红黑树理论完美但实现起来总让人头皮发麻。跳表 Skip List 是这类场景里性…

2026/10/16 6:28:53 阅读更多 →
灵珠AI好用吗?2026年零代码AI应用平台功能与适用人群分析

灵珠AI好用吗?2026年零代码AI应用平台功能与适用人群分析

CSDN 博客|原创|AI 应用|零代码|AI 创作 标签:灵珠 AI、零代码 AI 应用平台、AI 应用创作、魔改、AI 互动内容前言大模型快速普及之后,AI 工具赛道分化明显:一类面向程序员,帮助写代…

2026/10/16 6:28:53 阅读更多 →

最新新闻

面向对象核心知识详解:从类与对象到封装继承多态

面向对象核心知识详解:从类与对象到封装继承多态

最近重新翻出自己几年前记的一套面向对象基础笔记,边看边感慨。当年跟着一套讲得很细的Java基础课,逐行敲代码、抄概念、画内存图的日子,其实才是真正把编程底子打牢的阶段。面向对象这四个字,很多新手一听就觉得抽象,…

2026/10/16 7:14:04 阅读更多 →
antenna-forge 的核心信条:为什么『绝不伪造结果』是电磁仿真平台不可妥协的底线

antenna-forge 的核心信条:为什么『绝不伪造结果』是电磁仿真平台不可妥协的底线

【免费下载链接】antenna-forge AI-driven inverse antenna design with real NEC2 openEMS in the loop. Try the live in-browser playground. 项目地址: https://gitcode.com/gh_mirrors/an/antenna-forge 点击查看 免费下载 antenna-forge(YAF&…

2026/10/16 7:14:04 阅读更多 →
Markdown转知识卡片:解决公众号手机端排版难题的利器

Markdown转知识卡片:解决公众号手机端排版难题的利器

作为一个常年用 Markdown 码字、又经常要打理手机端内容的人,我最烦的一件事就是:电脑上排得好好的文章,一到公众号后台粘贴就彻底翻车。代码块没有高亮、列表层级全丢、整段文字挤成一堵密不透风的墙,读者拿手机看两行就划走了。…

2026/10/16 7:14:04 阅读更多 →
SSM+Vue实战:学生作业管理系统开发全攻略

SSM+Vue实战:学生作业管理系统开发全攻略

每年到毕业季,总有学生为毕设选题和实现头疼。如果你正好在找Java方向的系统类毕设,或者想做一个能跑通前后端分离的完整项目,“基于SSMVue的学生作业管理系统”是个非常经典且性价比极高的选择。这个项目不复杂但五脏俱全,覆盖了…

2026/10/16 7:14:04 阅读更多 →
REPENTOGON 的 Lua Vector 类深度指南:运算符元方法、FromAngle 与 nil 安全修复

REPENTOGON 的 Lua Vector 类深度指南:运算符元方法、FromAngle 与 nil 安全修复

游戏开发插件系统 【免费下载链接】REPENTOGON Script extender for The Binding of Isaac: Repentance 项目地址: https://gitcode.com/gh_mirrors/re/REPENTOGON 点击查看 免费下载 Vector 是《以撒的结合:忏悔》(The Binding of Isaac: R…

2026/10/16 7:14:04 阅读更多 →
OCR自动标注工具实战:检测识别与人工复核的全流程解析

OCR自动标注工具实战:检测识别与人工复核的全流程解析

说到OCR自动标注,做过数据标注或者AI数据集相关工作的人应该都不陌生。不管是票据、合同、书页扫描件,还是截图、卡片、白底商品图,只要涉及文字信息结构化,第一步都是把图片里的文字区域框出来,再把文字内容读出来&am…

2026/10/16 7:13:04 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →