Mysql MVCC实现原理以及解决幻读和不可重复读问题

2021年3月6日 30点热度 0条评论 来源: xuxizhou1994

数据读取特性

  • 不可重复读
    • 指一个事务范围内两个相同的查询却返回了不同数据
    • 这是由于查询时系统中其他事务修改的提交而引起的
  • 幻读
    • 在两个连续的查找之间一个并发的修改事务修改了查询的数据集,导致这两个查询返回了不同的结果
    • 这是由于查询时系统中其他事务新增或者删除记录引起的

事务隔离级别

  • Read Commited(提交读)
    • 一个事务从开始到提交前,所作的任何修改对其他事务不可见
    • 仅能读取到已提交的记录,这种隔离级别下,每条语句都会读取已提交事务的更新,若两次查询之间有其他事务提交,则会导致两次查询结果不一致。
  • Repeatable Read(可重复读)
    • 在同一个事务中,多次读取同样的记录的结果是一致的

快照读与当前读

在MVCC并发控制中,读操作可以分成两类,快照读与当前读

  • 快照读
    • 读取的是记录数据的可见版本(可能是过期的数据),不用加锁
    • 简单select使用该读取方式
  • 当前读
    • 读取的是记录数据的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发的修改这条记录
    • select ... lock in share mode
    • select ... for update
    • insert
    • update
    • delete
    • 以上查询将使用当前读

什么是MVCC

指多版本并发控制,让普通的select语句直接读取指定版本的值,

    原文作者:xuxizhou1994
    原文地址: https://blog.csdn.net/weixin_36995355/article/details/114261115
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。