mysql数据库写的好的文章
MySQL行锁表锁和语句加锁分析
MySQL事务和MVCC
ReadView的使用
有了这个 ReadView,这样在访问某条记录时,只需要按照下边的步骤判断记录的某个版本是否可见
-
如果被访问版本的
trx_id属性值 等于(=)ReadView 中的creator_trx_id值,意味着当前事务在访问它自己修改过的记录,所以该版本可以被当前事务访问。 -
如果
trx_id小于(<)min_trx_id,表明生成该版本的事务在当前事务生成 ReadView 前已经提交,所以该版本可以被当前事务访问。 -
如果
trx_id大于等于(>=)min_trx_id,表明生成该版本的事务在当前事务生成 ReadView 后才开启,所以该版本不可以被当前事务访问。 -
如果
trx_id属性值在min_trx_id和max_trx_id之间,那就需要判断一下trx_id属性值是不是在m_ids列表中。- 如果在,说明创建 ReadView 时生成该版本的事务还是活跃的,该版本不可以被访问;
- 如果不在,说明创建 ReadView 时生成该版本的事务已经被提交,该版本可以被访问