MySQL事务 - ReadView

1、概念理解

隔离级别中提到:

  • 对于使用READ UNCOMMITTED隔离级别的事务来说,直接读取记录的最新版本就好了。
  • 对于使用SERIALIZABLE隔离级别的事务来说,使用加锁的方式来访问记录。
  • 对于使用READ COMMITTEDREPEATABLE READ隔离级别的事务来说,就需要通过ReadView追溯版本链

核心问题就是:需要判断一下版本链中的哪个版本是当前事务可见的。所以设计InnoDB的设计者提出了一个ReadView的概念,这个ReadView中主要包含当前系统中还有哪些活跃的读写事务,把它们的事务id放到一个列表中,我们把这个列表命名为为m_ids

这样在访问某条记录时,只需要按照下边的步骤判断该记录在版本链中的某个版本(trx_id)是否可见:

  • trx_id < m_ids列表中最小的事务id
    表明生成该版本的事务在生成ReadView前已经提交,所以该版本可以被当前事务访问。
  • trx_id > m_ids列表中最大的事务id
    表明生成该版本的事务在生成ReadView 后才生成,所以该版本不可以被当前事务访问。
  • m_ids列表中最小的事务id < trx_id < m_ids列表中最大的事务id
    (1)trx_id在m_ids中:说明创建 ReadView 时生成该版本的事务还是活跃的,该版本不可以被访问。
    (2)trx_id不在m_ids中<
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: MySQLRead view是InnoDB存储引擎实现MVCC(多版本并发控制)的一部分。它主要用于支持在并发读取事务数据时保证数据的一致性。在MVCC中,每个事务都可以看到数据库中的一个快照版本。在并发读取时,Read view可以确保每个事务看到的数据版本是相同的,从而确保数据的一致性。 Read view是一个由系统版本号和活动事务列表组成的数据结构。系统版本号表示当前数据库中的最新版本,而活动事务列表则包含正在运行的事务和已提交但尚未释放其快照版本的事务。在读取数据时,MySQL会使用当前的Read view来确定事务所能看到的数据版本,并且只返回在此版本之前提交的数据。 因此,Read viewMySQL中起着非常重要的作用,能够保证数据的一致性和并发性能。 ### 回答2: MySQLRead view(读视图)是一种用于查询事务中数据的逻辑快照。它的作用主要有以下几点。 首先,Read view用于解决并发事务中的读写冲突。当一个事务开始时,它会创建一个自己的Read view,该视图包含了当前事务开始时数据库中数据的一个快照。其他并发事务可以继续对数据库进行增删改操作,但读取该数据的事务只能读取到Read view中的数据。这样可以保证读取事务在并发环境下不会读到其他未提交的事务的脏数据,确保读操作的一致性和准确性。 其次,Read view用于实现事务的隔离级别。MySQL支持多种事务隔离级别,包括读未提交、读提交、可重复读和串行化。每种隔离级别在Read view中有不同的实现方式,从而保证不同隔离级别下的事务读取到的数据是符合要求的。 另外,Read view还可以用于MVCC(多版本并发控制)机制。MVCC在数据库中可以实现事务的并发控制,通过为每个事务分配唯一的事务标识和Read view来实现。Read view中记录了每个事务开始时数据库中数据的一个快照,可以对比该快照和数据库当前的版本,判断其他事务的读写冲突,进而进行相应的并发控制,提高数据库的并发性能。 总之,MySQLRead view在并发事务中起到了保证读操作的一致性和隔离性的作用,同时也是实现MVCC机制的重要组成部分。通过使用Read view,可以使得事务在读取数据时不会受到其他并发事务的干扰,并保持数据库的一致性。 ### 回答3: MySQLRead view是指在并发读取过程中,为每个事务提供一致的读取快照。它的作用主要体现在以下几个方面: 首先,Read view可以解决读取过程中的脏读问题。当一个事务在执行过程中,其他事务可能会对相同的数据进行修改,如果没有Read view,就可能导致读取到未提交的脏数据。而通过使用Read view,每个事务都能读取到其他事务已提交的数据,避免了脏读问题的发生。 其次,Read view可以提供一致的读取视图。当一个事务开始时,Read view会记录下事务开始时数据库中所有数据的版本号。事务执行过程中,如果其他事务对数据进行了修改并提交了,那么这个事务仍然看到的是开始时的数据版本,保证了事务内部的一致性。 此外,Read view还可以提高并发读取的效率。在MySQL中,Read view通过MVCC(多版本并发控制)来实现。每个事务根据开始时的版本号,只读取那些已提交版本中的数据,可以避免了锁机制的使用,从而提高了并发读取的效率。 总的来说,MySQLRead view提供了一致的读取视图,解决了并发读取过程中可能出现的脏读问题,同时还提高了并发读取的效率。它是保证数据的一致性和并发性的重要机制之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值