MySQL事务与事务原理

本文详细介绍了事务的概念、ACID特性、隔离级别(包括幻读)、InnoDB存储引擎的事务处理机制、MVCC和ReadView在事务中的作用,以及事务链的构建。重点讲解了如何通过MVCC和不同隔离级别实现读已提交和可重复读的并发控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

事务

事务的四大特性ACID

事务隔离级别

事务原理

存储引擎

四大特性的保证

MVCC

事务链

ReadView


事务

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

start transaction; -- 开启事务 或者 begin 开启
...
rollback/commit; -- 回滚(全部失败)/提交(全部成功)

事务的四大特性ACID

  • 原子性:事务中的操作要么全部成功,要么全部失败
  • 一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态
  • 隔离性:多个并发事务之间要相互隔离
  • 持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的

事务日志用于保存对数据的更新操作

事务隔离级别

事务隔离级别分为读未提交、读已提交、可重复读、串行化四个级别。

隔离级别

脏读

不可重复读

幻读

读未提交

可能出现

可能出现

可能出现

读已提交

不会出现

可能出现

可能出现

可重复读

不会出现

不会出现

可能出现

串行化

不会出现

不会出现

不会出现

  • 脏读:指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了不一定最终存在的数据,这就是脏读。
  • 可重复读:指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的。通常针对数据更新(修改或删除)操作。
  • 不可重复读:对比可重复读,不可重复读指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了。通常针对数据更新(修改或删除)操作。
  • 幻读:幻读是针对数据插入操作来说的。幻读官方定义,在一个事务中,前后两次使用了相同的查询语句,但是第二次查询发现了第一次查询时不存在的数据(中间没有插入操作),这种查询到了此前未存在的数据就是幻读。

个人看法:按照可重复读隔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值