一、事务与并发控制基础

1.1 事务ACID特性

在分布式系统中,事务需要满足以下核心特性:

  • 原子性:事务操作不可分割,全部完成或全部失败
  • 一致性:事务执行前后数据库状态保持一致
  • 隔离性:事务之间相互隔离,避免并发执行的干扰
  • 持久性:事务提交后永久生效,即使系统崩溃也不会丢失

对于InnoDB存储引擎,ACID特性通过日志系统(Redo Log)和多版本并发控制(MVCC)实现,MySQL 8.0版本后已完全支持事务性存储引擎。

1.2 并发问题分类体系

四个经典的并发问题及其表现形式:

问题类型 定义说明 典型场景
脏写 事务A写入数据后未提交,事务B又覆盖该数据,导致A的写入被B无效 两个事务对同一行数据进行并发修改,典型例子为数据库主从复制中的write-ahead log问题
脏读 事务A写入未提交数据,事务B读取该数据导致读取到无效数据 高并发读取场景,如统计报表生成时读取未提交的业务数据
不可重复读 事务A读取数据后,事务B修改该数据并提交,导致A再次读取时结果不同 需要保证数据一致性的金融交易场景
幻读 事务A读取数据集后,事务B插入新数据并提交,导致A重新查询时结果集变化 跨数据库查询时可能遇到的分布式事务问题

示例:银行转账场景中,两个事务并发处理同一账户的余额变化,若未正确处理隔离性,可能导致数据不一致

二、事务隔离级别体系详解

2.1 五级隔离体系(ANSI SQL标准)

事务隔离级别按照隔离强度从低到高分为五级:

级别名称 隔离强度 解决的问题 存在的风险 适用场景
Read Uncommitted 最低 脏读、脏写、不可重复读、幻读 临时数据处理或允许脏读的批处理任务
Read Committed 中等 脏读 不可重复读、幻读 互联网应用中常见,如购物车数据处理
Repeatable Read 脏读、不可重复读 幻读 要求强一致性但允许一定并发的场景