Jw
首页
技术
英语
首页
技术
英语
  • MySQL

    • MySQL 基础
    • 环境变量配置(PATH)
    • SQL 语法与分类
    • MySQL 数据类型
    • SQL - DDL 数据定义语言
    • SQL - DML 数据操作语言
    • SQL - DQL 数据查询语言
    • SQL - DCL 数据控制语言
    • MySQL 函数
    • SQL 约束
    • SQL 外键约束
    • 多表关系
    • 多表查询(连接查询)
    • 隐式内连接 vs 显式内连接
    • 子查询
    • 多表查询案例
    • 事务
    • 并发事务问题与隔离级别
    • MySQL 体系结构与存储引擎
    • 索引概述
    • 索引结构
    • 索引分类
    • 索引语法
    • SQL 性能分析
    • 索引使用
    • 索引设计原则
    • SQL 优化 - 插入数据与主键优化
    • SQL 优化 - order by 与 group by
    • SQL 优化 - limit / count / update
    • 视图
    • 存储过程
    • 存储过程 - 变量
    • 存储过程 - 流程控制、游标与条件处理
    • 存储函数
    • 触发器
    • 锁概述与全局锁
    • 表级锁
    • 行级锁
    • InnoDB 逻辑存储结构
    • InnoDB 架构
    • 事务原理(redo / undo log)
    • MVCC
    • MySQL 系统数据库
    • MySQL 常用工具
    • 数据备份与导入导出
    • 错误日志与二进制日志
    • 查询日志与慢查询日志
    • 主从复制 - 概述与原理
    • 主从复制 - 搭建
    • Mycat 配置
    • Mycat 垂直拆分与水平拆分
    • Mycat 分片规则
    • Mycat 管理与监控
    • Mycat 读写分离 - 一主一从
    • Mycat 读写分离 - 双主双从

并发事务问题与隔离级别

多个事务并发执行时会互相影响,出现脏读、不可重复读、幻读三类问题;数据库通过事务隔离级别来控制这些问题。

一、并发事务问题

问题描述
脏读一个事务读到另外一个事务还没有提交的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同
幻读一个事务按照条件查询数据时没有对应的数据行,但在插入数据时又发现这行数据已经存在,好像出现了「幻影」

三者的区别:脏读读到了别人未提交的数据;不可重复读是同一条记录两次读到的值不一样(别人改了并提交);幻读是结果集的行数变了(别人插入/删除了并提交)。

二、事务隔离级别

隔离级别脏读不可重复读幻读
Read uncommitted√√√
Read committed×√√
Repeatable Read(MySQL 默认)××√
Serializable×××

(√ 表示该级别下此问题仍可能发生,× 表示已解决)

-- 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

-- 设置事务隔离级别
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE};

注意:事务隔离级别越高,数据越安全,但是性能越低。

三、速查

事项内容
三类并发问题脏读 → 不可重复读 → 幻读(严重程度递减)
默认隔离级别REPEATABLE READ(可重复读)
最安全 / 性能最低SERIALIZABLE
查看SELECT @@TRANSACTION_ISOLATION;
设置SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL ...;

相关

  • 事务:事务简介、操作与 ACID 四大特性
  • SQL - DQL:查询语句
最近更新: 2026/10/9 23:41
Contributors: liujw
Prev
事务
Next
MySQL 体系结构与存储引擎