Tagged: snapshot隔离

3

Snapshot的隔离和Repeatable的读

我们在上文的《Transaction弱隔离之读提交的介绍和实现》中详细介绍了读提交,总得来说它是一个很好的保证,但是有了它是否就足够了?答案是否定的,即使有了读保证,我们仍然会有问题,而这就是本文准备详细介绍的内容 。 我们首先来看下面这个图: 我们假设Alice有1000块存在银行里,分别在两个account里面,开始的时候一个里面放了500块。然后Alice开始查询两个账户一共多少钱,这个查询是一个transaction,它开始查到账户1里面有500,然后这个时候发生了一个交易,就是把账户2的钱转了100到了账户1. 在整个第二个transaction(转账的transaction,包含两个操作,一个是把账户1加100,一个是把账户2减少100)完成后,之前查询的transaction的第二个查账户2的操作才到了,所以它看到的账户2的数值是400,这就导致了Alice看到的账户总额变成了900而不是1000。这个过程中,并没有脏读,因为第二个400的读是在transaction完成之后才读的,所以完全符合之前读提交,但仍然还是有了问题。...