看看上面的例子,我们看看事物A 和事物B查询到的结果是什么,此时你老想一下,(没有特别说明,默认都是autocommit=1)
事物A的结果是1,而事物B的结果是3,不知道是否和你的答案一致呢,...为什么会是这样呢,首先我们得看看数据库的一个概念视图,数据库中有定义了两种视图
一个视图view是在一个查询语句生成的一个虚拟表,在调用查询语句并生成结果,创建的语句可用 create view ,查询方式和表的方式一样...上图中看到事物c先把(1,1)更新成了(1,2)此时row trx_id=102,然后事物B更新(1,2)为(1,3),此时的row trx_id=101,
此时我们来看看事物A查询的数据如何获取
此时事务...我们也验证一下上面的规则如下
(1,3)版本未提交,不可见
(1,2)版本提交,但是视图创建后提交,不可见
(1,1)版本提交,且是视图创建前提交,可见
但是有人会发现事物B 的update语句感觉是不有问题呢...事物A在获取查询语句的时候创建视图,(1,3)(1,2)此时生成的时刻是在创建视图之前,因此
(1,3)此时还没有提交,不可见
(1,2)此时已经提交,可见
因此事物A,k=2
显而易见事务B,k=3