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

【MySQL笔记】事务的ACID特性与隔离级别

目录

  • 1. 什么是事务?
  • 2. 事务的ACID特性
  • 3. 事务控制语法
  • 4. 隔离级别与并发问题

1. 什么是事务?

事务(Transaction)是由一组SQL语句组成的逻辑单元,这些操作要么全部成功,要么全部失败。
案例——银行转账:
在这里插入图片描述
转账成功: 张三给李四转100元,转账之前张三和李四的总额是1000+1000=2000,转账之后张三和李四的总额是900+1100=2000,这是正确的结果;
转账失败: 如果在转账的过程中张三的余额减了100 之后服务器崩溃了,李四的余额没有 加100,最终两个人的余额之和是900+1000=1900;

2. 事务的ACID特性

特性说明
原子性(Atomicity)事务内操作要么全成功,要么全失败
一致性(Consistency)事务前后数据完整性不变 (如转账总额守恒)
隔离性(Isolation)并发事务相互隔离,防止数据干扰
持久性(Durability)事务提交后数据永久存储

3. 事务控制语法

-- 1. 开启事务(两种方式)
START TRANSACTION; 
BEGIN;-- 2. 设置保存点
SAVEPOINT savepoint1;-- 3. 提交/回滚
COMMIT;       -- 提交
ROLLBACK;     -- 回滚
ROLLBACK TO savepoint1; -- 回滚到保存点-- 4. 自动提交设置
SET autocommit = 0; -- 关闭自动提交(默认=1开启)

注意:

  • 已提交的事务不可回滚
  • 自动提交模式下,一条SQL就是一个事务
  • 显式开启事务时(BEGIN后),必须手动COMMIT

4. 隔离级别与并发问题

MySQL支持4种隔离级别 (从上到下安全性⬆️ 并发性(性能)⬇️)

隔离级别脏读不可重复度幻读
READ UNCOMMITTED (读未提交)
READ COMMITTED (读已提交)
REPEATABLE READ (可重复度(默认))
SERIALIZABLE (串行化)

MySQL 的 InnoDB 存储引擎中通过 Next-Key 锁部分解决幻读问题

  1. 脏读:事务 A 读取了事务 B 未提交的数据
    • 例:B 修改数据中途崩溃,A 读到中间状态的数据
  2. 不可重复读:同事务内两次读取结果不同(数据值变化
    事务ADB事务B读取数据X=100修改X=200并提交再次读取X=200事务ADB事务B
  3. 幻读 :想通的查询条件两次返回数据的行数不同
    • 例:A 查询余额 >500 的账户,期间 B 新增满足条件的账户

生产建议:
MySQL 默认 REPEATABLE READ 在多数场景下平衡性能与安全
金融系统可考虑 SERIALIZABLE ,但需测试性能影响
谨慎使用 READ UNCOMMITTED(仅适用于可容忍脏读的场景)

http://www.dtcms.com/a/276292.html

相关文章:

  • 动态规划基本操作
  • AutoGen框架官方文档梳理-完整学习指南
  • Java中的方法传参机制
  • 【工程数学基础】条件极值与拉格朗日乘数法
  • uniapp弹出手机键盘,布局被顶飞,导致页面混乱问题
  • 使用包管理工具CocoaPods、SPM、Carthage的利弊与趋势
  • C#与FX5U进行Socket通信
  • 数据结构之并查集和LRUCache
  • OGC:开放地理空间联盟简介
  • YOLO家族内战!v5/v8/v10谁才是你的真命天子?(附保姆级选择指南)
  • SpringAI实现保存聊天记录到redis中
  • Softmax回归(多类逻辑回归)原理及完整代码示例实现
  • 如何查询服务器的操作系统
  • 算法题(173):枚举排列
  • Arduino 无线通信实战:使用 RadioHead实现 315MHz 433M模块数据传输
  • MS Azure Eventhub 发送 AD log 到cribl
  • 学习笔记 Datewhale MCP Server Task2
  • 免费用Claude code薅羊毛
  • 【模板】最长公共子序列 详细解析
  • FastGPT革命:下一代语言模型的极速进化
  • 集训Demo1
  • 史上最全 MySQL 锁详解:从理论到实战,一篇搞定所有锁机制
  • 接口和抽象方法示例
  • C语言基础知识--联合体
  • Mybatis的一级缓存与二级缓存
  • 电网失真下单相锁相环存在的问题
  • STM32第二十一天定时器TIM
  • docker搭建 与镜像加速器
  • LeetCode经典题解:3、无重复字符的最长子串
  • 【Elasticsearch】post_filter