【MySQL 零基础入门】事务精讲(三):隔离级别与实战总结

是思成呀:个人主页

个人专栏《C++知识总结》《MySQL 零基础入门到实战》


目录

[一、MySQL 的四种事务隔离级别](#一、MySQL 的四种事务隔离级别)

二、隔离级别的配置与验证(精简实战)

[1. 查看当前隔离级别](#1. 查看当前隔离级别)

[2. 设置隔离级别](#2. 设置隔离级别)

[3. 实战验证:REPEATABLE READ 解决不可重复读](#3. 实战验证:REPEATABLE READ 解决不可重复读)

三、事务知识全总结

[1. 核心概念](#1. 核心概念)

[2. 四大特性(ACID)](#2. 四大特性(ACID))

[3. 并发问题与隔离级别](#3. 并发问题与隔离级别)

[4. 实战建议](#4. 实战建议)

[四、MySQL 基础篇总结](#四、MySQL 基础篇总结)

结尾


引言

并发事务的脏读、不可重复读、幻读问题,本质是 "隔离性" 没做到位 ------ 而事务隔离级别,就是调整隔离性强弱的 "开关":调得太松,高中生数据不安全(如读到未提交的缴费记录);调得太紧,性能又差(如多个高中生同时缴费时排队)。MySQL 提供了四种隔离级别,从低到高覆盖不同场景需求。本文带你吃透每一种隔离级别的效果、配置方法,结合高中生缴费的实战验证隔离级别如何解决并发问题,最后对事务知识做全面总结!


一、MySQL 的四种事务隔离级别

隔离级别从低到高依次为:READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE,级别越高,数据一致性越强,并发性能越差,精简后 5 名学生的场景更易验证:

隔离级别 脏读 不可重复读 幻读 对高中教务场景的影响(精简版)
read uncommitted 读取到林墨涵未提交的缴费数据,误判余额不足
read committed 避免脏读,但查询余额 > 2000 的学生结果不一致
repaetable read 保证同一事务内查询结果一致,MySQL 默认
serializable 林墨涵缴费时阻塞其他操作,数据绝对安全但并发低

二、隔离级别的配置与验证(精简实战)

1. 查看当前隔离级别

sql 复制代码
-- 查看会话级隔离级别(仅当前窗口有效)
SELECT @@transaction_isolation;

-- 查看全局级隔离级别(对所有新会话有效)
SELECT @@global.transaction_isolation;

2. 设置隔离级别

sql 复制代码
-- 会话级设置(仅当前窗口有效)
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

-- 全局级设置(需重启会话生效)
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;

3. 实战验证:REPEATABLE READ 解决不可重复读

以高中生林墨涵的账户余额为例,验证可重复读的效果:

会话 A:开启事务,查询林墨涵余额

sql 复制代码
START TRANSACTION;
SELECT balance FROM student_account WHERE student_name = '林墨涵';  -- 结果:2000

会话 B:更新林墨涵余额并提交(模拟其他事务缴费操作)

sql 复制代码
UPDATE student_account SET balance = 500 WHERE student_name = '林墨涵';
COMMIT;

会话 A:再次查询林墨涵余额

sql 复制代码
SELECT balance FROM student_account WHERE student_name = '林墨涵';  -- 结果仍为2000(可重复读)
COMMIT;  -- 提交后查询,结果变为500

结论 :在 REPEATABLE READ 级别下,同一事务内多次读取数据结果一致,避免了不可重复读问题。

三、事务知识全总结

1. 核心概念

  • 事务是一组不可分割的操作集合,要么全部成功,要么全部失败;
  • 手动控制事务的三步:START TRANSACTION(开启)→ 执行操作(如高中生缴费)→ COMMIT/ROLLBACK(提交 / 回滚)。

2. 四大特性(ACID)

  • 原子性:操作不可分割(如缴费的扣余额和更状态必须同时完成);
  • 一致性:数据逻辑不变(如高中生缴费前后余额 + 缴费状态逻辑一致);
  • 隔离性:事务相互隔离(如多个高中生缴费事务互不干扰);
  • 持久性:修改永久保存(缴费记录提交后不会因服务器崩溃丢失)。

3. 并发问题与隔离级别

  • 并发问题:脏读(读未提交的高中生余额)、不可重复读(同一事务内高中生余额变化)、幻读(新增高中生记录导致结果行数变化);
  • 隔离级别:MySQL 默认 REPEATABLE READ,兼顾一致性和性能;
  • 选型原则:根据业务需求选择隔离级别(如学费结算用 SERIALIZABLE,普通成绩查询用默认级别)。

4. 实战建议

  • 避免长事务:长事务会占用锁资源,降低并发性能(如处理高中生数据时拆分事务);
  • 合理处理异常:事务内出现错误时,必须执行 ROLLBACK(如缴费失败时回滚余额扣减);
  • 慎用串行化:仅在核心业务场景使用,避免性能瓶颈(如非核心的高中生信息修改无需串行化)。

四、MySQL 基础篇总结

至此,MySQL 基础篇的核心知识点已全部讲解完毕,掌握这些内容后,你已具备开发中小型教务系统的数据库能力,足以应对 80% 的场景需求,后续进阶篇将深入讲解 SQL 优化、分库分表、数据库运维等内容。

建议通过实战项目(如高中生选课系统、成绩管理系统)巩固知识点,将理论转化为实践!

结尾

🍍 我是思成!若这篇内容帮你理清了 MySQL 事务隔离级别与实战总结的核心逻辑:

👀 【关注】跟我一起拆解 MySQL 核心知识点,从隔离级别到性能优化,吃透每一个事务实战规则

❤️ 【点赞】让技术干货被更多人看见,让抽象的隔离级别选择逻辑变得易懂

⭐ 【收藏】把四种隔离级别、高中生数据实战验证方法存好,事务调优 / 面试时随时查阅

💬 【评论】分享你为高中生系统选择事务隔离级别的经验,或想深挖的 MySQL 知识点,一起交流进步

技术学习没有捷径,但找对思路能少走弯路~愿我们都能把抽象的事务隔离规则,转化为可落地的并发控制方案,一步步构建自己的 MySQL 技术体系!

相关推荐
小智RE0-走在路上2 小时前
Python学习笔记(12) --对象,类的成员方法,构造方法,其他内置方法,封装,继承,多态,类型注解
笔记·python·学习
找不到、了2 小时前
MySQL的FEDERATED存储引擎详解
数据库·mysql
小希smallxi2 小时前
Windows平台一键启动Redis脚本
数据库·windows·redis
写代码的小阿帆2 小时前
MySQL索引原理与性能优化
数据库·mysql·性能优化
小蒜学长2 小时前
python基于Python的医疗机构药品及耗材信息管理系统(代码+数据库+LW)
数据库·spring boot·后端·python
星光一影2 小时前
同城搭子活动组局H5系统源码-伴伴搭子系统源码
vue.js·mysql·php·uniapp
千寻技术帮2 小时前
10363_基于SSM的农机租赁管理系统
mysql·毕业设计·ssm·源码·农机租赁
唐·柯里昂7982 小时前
[rk3566AI模型部署]泰山派buildroot部署yolov5 使用rknn_model_zoo
c语言·c++·笔记·yolo·rk3566·瑞芯微·泰山派
xUxIAOrUIII2 小时前
【数据库原理】期末复习(初稿)
数据库·笔记