问题
我们知道 mysql的InnoDB的事务隔离机制是通过mvcc实现的,比如在可重复读模式下,开启一个事务,那么当前事务的操作的记录会增加一个事务id,通过事务id进行可重复读的实现,那么存在一个误区:当前的事务是什么时候真正开始的?
答案:begin语法不会立即开启一个事务,而是到真正执行语句时,才会真正创建
验证
- 我们现在存在一个课程表:
select * from course;
2.我们开启一个事务A,但暂不执行任何语句:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
3.我们在另一个事务B修改数据并提交:
语文改为语文01
4. 在事务A中,首次执行查询语句:
发现查询结果是最新值,说明begin没有真正开启事务,只有第一条语句开始执行时,才会触发事务;如果begin开始事务的话,那么查询结果应该是语文,而不是语文01