08 | 事务到底是隔离的还是不隔离的?

对于当前事务的启动瞬间来说,一个数据版本的 row trx_id,有以下几种可能:

如果落在绿色部分,表示这个版本是已提交的事务或者是当前事务自己生成的,这个数据是可见的;

如果落在红色部分,表示这个版本是由将来启动的事务生成的,是肯定不可见的;

如果落在黄色部分,那就包括两种情况

a. 若 row trx_id 在数组中,表示这个版本是由还没提交的事务生成的,不可见;

 

b. 若 row trx_id 不在数组中,表示这个版本是已经提交了的事务生成的,可见。

08 | 事务到底是隔离的还是不隔离的?

版本未提交,不可见;

版本已提交,但是是在视图创建后提交的,不可见;

版本已提交,而且是在视图创建前提交的,可见。

 

08 | 事务到底是隔离的还是不隔离的?

我之前没有理解的一点是:事务B在更新之前还有一个当前读的操作,读最新的数据,不然会导致C的操作丢失。,这样也就读出来了K值已经变为2的事实,但是如果在更新之前加一句查询,查询到的K仍然是1.