MySQL事务隔离级别和MVCC

MySQL事务隔离级别和MVCC 参考:https://mp.weixin.qq.com/s/Jeg8656gGtkPteYWrG5_Nw

  • 1.MVCC只对读已提交和可重复的读有效果,而未提交读和串行则无意义。
  • 2.每条记录都会有trx_id(事务修改记录的id)和roll_pointer是一个指针指向旧版本的undo日志链表(row_id不是必必要的,如果有主键存在就不需要了)
  • 3.版本链的头结点就是记录的最新的值。
  • 4.ReadVie--包含当前系统中还有哪些活跃的读写事务,把它们的事务id放入到一个列表中,列表命名为m_ids。同时还有min_trx_id和max_trx_id
  • 5.min_trx_id:该值代表生成readview时m_ids中的最小值。
  • 6.max_trx_id:该值代表生成readview时系统中应该分配给下一个事务的id值。
  • 7.注意max_trx_id并不是m_ids中的最大值,事务id是递增分配的。比方说现在有id为1,2,3这三个事务,之后id为3的记录提交了。那么一个新的读事务在生成readview时,m_ids就包括1和2,min_trx_id的值就是1,max_trx_id的值就是4。
  • 8.所以判断可见性的步骤就是:
  • 9.如果记录的trx_id列小于min_trx_id,说明肯定可见。
  • 10.如果记录的trx_id列大于max_trx_id,说明肯定不可见。
  • 11.如果记录的trx_id列在min_trx_id和max_trx_id之间,就要看一下该trx_id在不在m_ids列表中,如果在,说明不可见,否则可见。
  • 12.如果trx_id在m_ids列表中则说明事务还未提交则该记录无法被提交。
  • 13.如果某个版本的数据对当前事务不可见的话,那就顺着版本链找到下一个版本的数据,继续按照上边的步骤判断可见性,依此类推,直到版本链中的最后一个版本,如果最后一个版本也不可见的话,那么就意味着该条记录对该事务不可见,查询结果就不包含该记录。
  • 14.读已提交则是每次查询的时候都会生成一个新的readView。
  • 15.可重复读则是第一次查询生成readView。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、事务 1、事务四要素:ACID 对于事务,我之前的理解是很粗糙的,不就是为了保证操作的原子性么?一般订单系统或...
    张伟科阅读 1,368评论 0 5
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,477评论 0 9
  • 事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。MySQL...
    itczl阅读 1,032评论 0 0
  • 说明 说起web service最近几年restful大行其道,大有取代传统soap web service的趋势...
    AubreyXue阅读 1,220评论 0 5
  • 松鼠陪着核桃,在庭院里捉迷藏。 葡萄躲进橡木桶酿出时光。 夏日在玉米齿缝里游荡。 我为你准备的四季,正在生长。 炼...
    姜希米励阅读 304评论 0 0