【mysql】事务隔离与mvcc的误区
发布日期:2021-05-08 11:05:01 浏览次数:11 分类:精选文章

本文共 404 字,大约阅读时间需要 1 分钟。

文章目录

问题

我们知道 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

上一篇:【mysql】详细分析MySQL事务日志(redo log和undo log)
下一篇:【mysql】MySQL中的锁原理(表锁、行锁、间隙锁、共享锁、排他锁)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月10日 05时23分17秒