Dreamer Dreamer
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

lycpan233

白日梦想家
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Mysql

    • 浅谈char与varchar尾随空格对比
    • utf8存储emoji处理
    • Mysql 查询每个班级的前几名
    • Text为什么不支持设置默认值
    • Mysql 事务级别与差异
      • Mysql 事务级别与特性
      • ACID 模型
      • 脏读、幻读、不可重复读
        • 脏读
        • 幻读
        • 不可重复读
      • 隔离级别
        • REPEATABLE READ
        • READ COMMITTED
        • READ UNCOMMITTED
        • SERIALIZABLE
      • 相关文档
    • Mysql SQL 优化思路
  • Node

  • Go

  • Docker

  • 后端
  • Mysql
lycpan233
2025-02-13
目录

Mysql 事务级别与差异

# Mysql 事务级别与特性

本文内容基于 Mysql 5.7 文档,不保证时效性...

隔离级别 能防止脏读 能防止不可重复读 能防止幻读 适用场景
READ UNCOMMITTED ❌ ❌ ❌ 允许高并发,但数据不可靠(几乎不用)
READ COMMITTED ✅ ❌ ❌ 适用于大多数业务
REPEATABLE READ ✅ ✅ ❌ InnoDB 默认,适合中等并发
SERIALIZABLE ✅ ✅ ✅ 严格数据一致性,但性能差

# ACID 模型

ACID 模型是一组数据库原则,它旨在保障事务的可靠性。

其中:

  • Atomicity(原子性),确保事务为原子操作,即要求事务要么全部执行成功,要么完全回滚。
  • Consistency(一致性),确保事务执行成功、失败,或执行中,不存在数据新旧值参半的情况。
  • Isolation(隔离性),确保事务之间互不干扰或查看到彼此未提交的数据。
  • Durability(持久性),确保事务执行成功后数据持久化到磁盘,不会受服务崩溃等情况影响。

# 脏读、幻读、不可重复读

# 脏读

脏读是指在事务中会读取到其它事务未提交的数据。且当其它事务回滚以后,该数据就变成了脏数据,因此会导致,当前事务基于脏数据进行后续操作,从而使得整个数据不可信。

# 幻读

幻读是指在事务中一个查询语句运行多次,多次的返回的结果集不同(数量多/少了),通常是由 INSERT 引起的。

# 不可重复读

不可重复读是在事务中前后两次查询的同一行数据内容不同,通常是由 UPDATE、DELETE 操作引起的。

# 隔离级别

# REPEATABLE READ

可重复读级别,InnoDB 的默认级别。其确保在事务中,多次使用非 Lock SELECT 语句查询时,返回结果一致。

当前隔离级别下,一般不会出现幻读的情况,但使用 Lock SELECT 情况下,可能出现前后数据不一致的情况。

# READ COMMITTED

读已提交级别,实现在当前事务中,读取其它已经提交的事务。因此会产生幻读、不可重复读的问题。

# READ UNCOMMITTED

读未提交级别,在事务中可以读到其它事务未提交的数据,因此会产生脏读、不可重复读、幻读的问题。

# SERIALIZABLE

序列化级别,该级别基于 RR, 隐式的将 SELECT 语句转为 Lock 类型,从而避免幻读的问题。

# 相关文档

innodb-transaction-model (opens new window)

glossary.html (opens new window)

编辑 (opens new window)
上次更新: 2025/06/12, 08:45:25
Text为什么不支持设置默认值
Mysql SQL 优化思路

← Text为什么不支持设置默认值 Mysql SQL 优化思路→

最近更新
01
docker基础概念
02-26
02
js 获取变量准确类型
02-19
03
Mysql SQL 优化思路
02-18
更多文章>
Theme by Vdoing | Copyright © 2023-2025 Dreamer | MIT License
粤ICP备2025379918号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式