自学内容网 自学内容网

mysql的mvcc机制中,read view是什么时候生成的?

在 MySQL 的 Read Committed (RC) 隔离级别下,读视图(Read View) 的生成遵循以下原则:


RC 隔离级别下 Read View 的生成时机

在 RC 隔离级别中,每次执行**快照读(Snapshot Read)**时都会生成一个新的 Read View,而不会在事务开始时就固定一个 Read View。这意味着:

  1. 每个查询都会生成一个新的 Read View

    • 每次执行 SELECT 查询时,都会获取当前数据库的最新提交版本。
    • 查询不会受到事务中前一次查询的 Read View 的限制。
  2. 与事务的写操作无关

    • 即使事务已经执行过写操作 (INSERT, UPDATE, DELETE),后续的读操作依然会基于最新的已提交数据生成新的 Read View

RC 与 Read View 的关键点

  • 实时性:RC 隔离级别确保每次查询都能读取到其他事务已经提交的最新数据。
  • 快照独立性:RC 的每次查询生成的 Read View 是独立的,与事务其他查询生成的 Read View 无关。
  • 不可重复读:由于每次查询生成的 Read View 不同,同一事务中的两次查询可能读取到不一致的数据(即不可重复读)。

RC 隔离级别下 Read View 的作用

在 RC 中,Read View 的主要作用是:

  1. 避免读取未提交的数据(防止脏读)。
  2. 每次查询的 Read View 确保只读取其他事务已经提交的数据版本。

对比 RR 隔离级别

Repeatable Read (RR) 隔离级别下:

  • Read View 只在事务的第一次快照读时生成。
  • 整个事务中后续的快照读共享相同的 Read View
  • 保证了同一事务内的可重复读。

而在 RC 中,每次查询的 Read View 独立生成,因此可能导致不可重复读。


总结

Read Committed (RC) 隔离级别下:

  • Read View 是在每次执行快照读时生成的,而不是在事务开始时固定生成。
  • 这一机制确保了事务每次查询可以看到最新的已提交数据,同时也导致了不可重复读的现象。

原文地址:https://blog.csdn.net/LONG_Yi_1994/article/details/143842712

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!