【事务】幻读

【和不可重复读区别】

https://cloud.tencent.com/developer/article/1450773

[phantom read概念]

A transaction re-executes a query returning a set of rows that satisfy a search condition and finds that the set of rows satisfying the condition has changed due to another recently-committed transaction.

没有讲清楚区别

腾讯这个博客的理解:

(1) 不可重复读是读取了其他事务更改的数据,针对update操作

解决:使用行级锁,锁定该行,事务A多次读取操作完成后才释放该锁,这个时候才允许其他事务更改刚才的数据。

(2) 幻读是读取了其他事务新增的数据,针对insert和delete操作

解决:使用表级锁,锁定整张表,事务A多次读取数据总量之后才释放该锁,这个时候才允许其他事务新增数据。

这时候再理解事务隔离级别就简单多了呢。

【实验】

 【调试】

左边xid=993, snapshot.xmin=994, 所以能看到

右边,(TransactionIdFollowsOrEquals(xid, snapshot->xmax))=true,都是995

posted @ 2022-02-13 12:10  stupidstan2019  阅读(140)  评论(0编辑  收藏  举报