【mysql】事务隔离与mvcc的误区(事务是什么时候开始的)

本文通过一个实例探讨了MySQL InnoDB的事务隔离机制,特别是MVCC在可重复读(Repeatable Read)模式下的工作原理。在开始一个事务后,并非立即生效,而是在执行第一条语句时才真正创建事务。在一个事务A中,即使使用了`BEGIN`,在未执行任何操作时,其他事务如B对数据的修改可以被看到,证明了事务A并未真正开始。这有助于理解MySQL事务处理的细节。
摘要由CSDN通过智能技术生成

文章目录

问题

我们知道 mysql的InnoDB的事务隔离机制是通过mvcc实现的,比如在可重复读模式下,开启一个事务,那么当前事务的操作的记录会增加一个事务id,通过事务id进行可重复读的实现,那么存在一个误区:当前的事务是什么时候真正开始的?

答案:begin语法不会立即开启一个事务,而是到真正执行语句时,才会真正创建

验证

  1. 我们现在存在一个课程表:

select * from course;
在这里插入图片描述

2.我们开启一个事务A,但暂不执行任何语句:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

3.我们在另一个事务B修改数据并提交:
语文改为语文01
在这里插入图片描述
4. 在事务A中,首次执行查询语句:

在这里插入图片描述
发现查询结果是最新值,说明begin没有真正开启事务,只有第一条语句开始执行时,才会触发事务;如果begin开始事务的话,那么查询结果应该是语文,而不是语文01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值