什么是事务?事务的隔离性级别?

本文深入解析Mysql事务的四大特性:原子性、一致性、隔离性和持久性,以及四种隔离级别:未提交读、提交读、可重复读和串行化。详细解释了每种特性的作用和隔离级别的差异。

事务

Mysql中,事务就是一组原子性的sql查询,或者说是一个独立的工作单元。
事务有四个特性,原子性,一致性,隔离性,持久性
原子性指对一个事务来说,要么全部提交成功,要么全部回滚失败,不存在只执行其中的一部分。
一致性指:一个事务在执行之前和执行之后,数据库都必须处于一致性状态,也就是说,事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态。
隔离性:隔离性最常见在并发环境下,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰。也就是说,不同的事务并发操纵相同的数据时,每个事务都有各自完整的数据空间,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的 各个事务之间不能互相干扰。
持久性:指一旦事务提交,则其所作的修改就会永久保存在数据库中。即使发生系统崩溃或机器宕机等故障,修改的数据也不会消失。

隔离级别

1.未提交读:在这个隔离级别下,事务可以读取未提交的数据,也称作脏读。
2.提交读:只允许读取已提交的数据
3.可重复读:这个隔离级别保证了同一事务中多次读取同样的数据结果一致,但是会发生所谓的幻读现象,,幻读指的是一个事务在读取某一个范围数据时,另一个事务又在该范围插入了新的记录,当之前的事务再次读取时会发生幻行,也就是结果不一致。
4.串行化:他是最高的隔离级别,强制事务串行执行,事务一个个执行不能并发。他会在每一行数据上加锁,所以会导致大量超时和锁争用问题。

mysql默认使用重复读级别,因为这个级别既能防止脏读还有良好的并发性,但是会出现幻读现象,但这个问题可以通过乐观锁和悲观锁来控制。

<think>我们正在讨论MySQL事务隔离级别事务的定义。用户之前的问题是关于K8sDocker的Namespace区别,但现在转向了MySQL事务。根据引用内容,我们需要解释事务的定义隔离级别事务的定义:事务是数据库操作的最小工作单元,通常包含一个或多个操作,这些操作要么全部成功执行(提交),要么全部失败回滚(回滚)。事务必须满足ACID特(原子、一致隔离、持久)。 隔离级别事务隔离级别定义了多个并发事务之间如何相互隔离,特别是事务对数据修改的可见。SQL标准定义了四种隔离级别,从低到高依次为:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)、串行化(SERIALIZABLE)。 根据引用[1]:事务隔离级别决定了多个事务并发执行时,一个事务的修改对其它事务的可见隔离级别越高,隔离越好,但并发能下降。 引用[3]详细说明了串行化(SERIALIZABLE)隔离级别事务完全串行执行,避免了脏读、不可重复读幻读,但并发能最低。 引用[4]提到在分布式事务中(XA事务),InnoDB存储引擎必须使用串行化隔离级别。 此外,引用[2]提到了MVCC(多版本并发控制),它是实现事务隔离级别(特别是可重复读读已提交)的一种机制。 现在,我们需要结构化回答: 1. 事务定义(ACID) 2. 四种隔离级别的定义问题(脏读、不可重复读、幻读) 3. 隔离级别与并发能的关系 4. MVCC的简要说明(根据引用[2]) 同时,生成相关问题。 注意:引用标识放在相关内容的末尾,例如:事务隔离级别定义了事务之间的可见[^1]。 </think>### MySQL事务定义与隔离级别详解 #### 一、事务定义 事务是数据库操作的最小工作单元,具备ACID特: 1. **原子**(Atomicity):事务内操作要么全部成功提交,要么全部失败回滚[^1] $$ \text{Commit或Rollback} \rightarrow \text{全成功/全失败} $$ 2. **一致**(Consistency):事务使数据库从一个有效状态转换到另一个有效状态 3. **隔离**(Isolation):并发事务相互隔离,互不干扰 4. **持久**(Durability):事务提交后数据永久存储 #### 二、事务隔离级别 隔离级别决定并发事务间的可见规则,级别越高并发能越低[^1]: | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 实现机制 | 能 | |-------------------|------|------------|------|------------------------|--------| | **读未提交** (READ UNCOMMITTED) | ✓ | ✓ | ✓ | 无锁 | 最高 | | **读已提交** (READ COMMITTED) | ✗ | ✓ | ✓ | 行锁 + MVCC[^2] | 较高 | | **可重复读** (REPEATABLE READ) | ✗ | ✗ | ✓ | MVCC快照[^2] | 中等 | | **串行化** (SERIALIZABLE) | ✗ | ✗ | ✗ | 表级锁[^3] | 最低 | ##### 关键问题说明: 1. **脏读**:读取到其他事务未提交的数据 2. **不可重复读**:同事务内两次读取结果不同(数据被修改) 3. **幻读**:同事务内两次查询返回不同行数(数据被新增/删除) 4. **MVCC机制**:通过版本链实现多版本并发控制(如下图)[^2] $$ \text{ReadView} + \text{Undo Log} \rightarrow \text{版本快照} $$ #### 三、隔离级别设置示例 ```sql -- 查看当前隔离级别 SELECT @@transaction_isolation; -- 设置会话级隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- 分布式事务需强制串行化[^4] SET GLOBAL transaction_isolation = 'SERIALIZABLE'; ``` #### 四、特殊场景说明 1. **分布式事务**:必须使用`SERIALIZABLE`级别保证全局一致[^4] $$ \text{XA事务} \Rightarrow \text{所有参与者共进退} $$ 2. **InnoDB优化**:在`REPEATABLE READ`级别通过间隙锁(Gap Lock)解决幻读
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值