Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql隔离性与一致性

MYSQL事务(中)之隔离性与一致性原理详解

作者:艾莉丝努力练剑

在MySQL中,事务(Transaction)是处理数据时保持数据完整性和一致性的关键机制,理解事务的隔离性(Isolation)和一致性(Consistency)对于确保数据库操作的正确性和高效性至关重要,本文介绍MYSQL事务(中)之隔离性与一致性,感兴趣的朋友一起看看吧

0 ~> 隔离性与一致性知识图谱

MySQL事务:隔离性与一致性
├─ 1 ~> 隔离性基础认知
│  ├─ 1.1 数据库三类并发场景
│  ├─ 1.2 隔离性的本质定义
│  └─ 1.3 隔离级别的设计逻辑
├─ 2 ~> 四种事务隔离级别详解
│  ├─ 2.1 读未提交(Read Uncommitted)
│  ├─ 2.2 读提交(Read Committed)
│  ├─ 2.3 可重复读(Repeatable Read)
│  └─ 2.4 串行化(Serializable)
├─ 3 ~> 隔离级别的查看与设置
│  ├─ 3.1 全局与会话隔离级别差异
│  └─ 3.2 标准SQL语法
├─ 4 ~> 并发异常与对应关系
│  ├─ 4.1 三类读异常
│  │  ├─ 脏读
│  │  ├─ 不可重复读
│  │  └─ 幻读
│  ├─ 4.2 两类更新丢失
│  └─ 4.3 隔离级别-问题对照表
├─ 5 ~> 隔离性实现原理基础
│  ├─ 5.1 MVCC多版本并发控制
│  └─ 5.2 锁机制基础
├─ 6 ~> 事务一致性(Consistency)
│  ├─ 6.1 一致性的定义
│  └─ 6.2 AID与C的因果关系
└─ 7 ~> 原笔记技术审计与纠错

1 ~> 隔离性基础认知

1.1 数据库三类并发场景

1.2 隔离性的本质定义

1.3 隔离级别的设计逻辑

2 ~> 四种事务隔离级别详解

2.1 读未提交(Read Uncommitted, RU)

2.2 读提交(Read Committed, RC)

2.3 可重复读(Repeatable Read, RR)

2.4 串行化(Serializable)

3 ~> 隔离级别的查看与设置

3.1 全局与会话隔离级别差异

3.2 标准 SQL 语法

查看隔离级别

-- 查看全局隔离级别
SELECT @@global.tx_isolation;
-- 查看当前会话隔离级别
SELECT @@session.tx_isolation;
-- 简写形式,默认查看会话隔离级别
SELECT @@tx_isolation;

兼容性说明:MySQL 8.0 版本中 tx_isolation 变量已被废弃,替换为 transaction_isolation;5.7 版本中使用 tx_isolation 会触发警告,开发与面试中需注意版本差异。

设置隔离级别

-- 设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE};
-- 设置全局隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE};

4 ~> 并发异常与对应关系

4.1 三类读异常

4.1.1 脏读(Dirty Read)

4.1.2 不可重复读(Non-Repeatable Read)

4.1.3 幻读(Phantom Read)

4.2 两类更新丢失

4.3 隔离级别 - 问题对照表

隔离级别脏读不可重复读幻读实现方式并发性能
读未提交存在存在存在几乎无锁最高
读提交不存在存在存在MVCC(语句级快照)
可重复读(InnoDB)不存在不存在基本不存在 *MVCC(事务级快照)+ Next-Key 锁
串行化不存在不存在不存在全量加锁串行执行最低

*:标准 SQL 规范中 RR 级别存在幻读;MySQL InnoDB 的 RR 级别在快照读场景无幻读,当前读场景通过 Next-Key 锁防止幻读。

5 ~> 隔离性实现原理基础

5.1 MVCC(多版本并发控制)

5.2 锁机制基础

6 ~> 事务一致性(Consistency)

6.1 一致性的定义

6.2 AID 与 C 的因果关系

结论:原子性(Atomicity)、隔离性(Isolation)、持久性(Durability)是「因」,一致性(Consistency)是「果」

到此这篇关于MYSQL事务(中)之隔离性与一致性原理详解的文章就介绍到这了,更多相关mysql隔离性与一致性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文