事务
对于MySQL repeatable Isolation,transaction 1 如果读发生在 transaction 2的commit前面,那么transaction 2的update是不影响到transaction 1的read的,这样就会是一个Lost Update
如果transaction 1的read发生在transaction 2后面,即transaction 2先执行完并且commit了,那么就会出现你上面说的这个例子。
注意MySQL下:update a = a + 1,这个是Atomic Operation,不是Lost Update。
Lost Update是: read a, calculate b = a + 1, update b
UNDOLOG
当一个事务读取某条数据时,就会按照如下规则来决定当前事务能读取到什么数据:
(a)row_trx_id 在 m_ids 数组中,那么当前事务不能读取到。为什么呢?row_trx_id 在 m_ids 数组中表示的是和当前事务在同一时刻开启的事务,修改了数据的值,并提交了事务,所以不能让当前事务读取到;
(b) row_trx_id 不在 m_ids 数组中,那么当前事务能读取到。row_trx_id 不在 m_ids 数组中表示的是在当前事务开启之前,其他事务将数据修改后就已经提交了事务,所以当前事务能读取到。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。