美文网首页
8.2 快照读,当前读

8.2 快照读,当前读

作者: 胖达_4b7e | 来源:发表于2019-02-22 00:04 被阅读0次

当前读

这些是当前读:

select...lock in share mode (就这个是共享锁)
select...for update
update , delete , insert

当前读, 就是加了锁
读取的是最新版本, 并且对读取的记录加锁, 不让其他事务同时去改(其他事务要阻塞下)


update执行过程,insert和delete也一样

快照读:

普通select时是,
基于提升并发的考虑,
基于MVCC多版本并发控制(行锁的变种)
改进成不加锁了(除非是隔离级别是串行),
读的是视图, 不是最新数据

如果先select 再update 可能会看到幻行, 因为select读的可能是老的版本, 有其他事务插入或者删除过行,所以和更新读到的最新版本行数不一样

读已提交

select (快照读)
select...lock in share mode(当前读)
结果是一样的
因为快照读, 采纳的是这之前提交的最后版本
当前读 是读的最新版本
是同一版本

重复读

select (快照读): 快照读的版本
select...lock in share mode(当前读) : 最新版本
结果可能不同, 后者可能更新
即使有过当前读, 再快照读, 也还是读快照

undo log:

每行除了数据外 还有
DB_TRX_ID: 最后更新的事务id(update,delete,insert)
DB_ROLL_PTR: 回滚指针, 指向前一个版本 , 组成 undo 链
DB_ROW_ID: 行id的值 自增

  • insert undo log: 只在事务回滚时需要, 事务提交就可以删掉了
  • update undo log: 包括update 和 delete , 回滚和快照读 都需要
undo log

开始只有最下面一行,
事务1 先排他锁锁住它(当前读,读到最新数据然后独占),复制到第二行,更新字段, 把自己的id填入DB_TRX_ID, 让DB_ROLL_PTR 指向原数据
事务2也有一样, 产生的第三行

相关文章

  • 8.2 快照读,当前读

    当前读 这些是当前读: select...lock in share mode (就这个是共享锁)select.....

  • mysql的幻读处理机制

    当前与快照读 当前与快照读 mysql的幻读处理机制 参考Mysql(Innodb)如何避免幻读我在mysql 8...

  • MVCC原理机制

    目录 背景 前提回顾什么是MVCC什么是当前读和快照读当前读,快照读和MVCC关系MVCC,乐观锁,悲观锁关系 M...

  • MVCC多版本并发控制

    前提概要什么是MVCC什么是当前读和快照读?当前读,快照读和MVCC的关系 MVCC实现原理隐式字段undo日志R...

  • MVCC多版本并发控制

    前提概要什么是MVCC什么是当前读和快照读?当前读,快照读和MVCC的关系 MVCC实现原理隐式字段undo日志R...

  • MySQL/InnoDB 的事务隔离级别和锁

    事务的隔离级别 读分为快照读和当前读。用 MVCC 可解决快照读的脏读、幻读问题,不需要上锁。 Read Unco...

  • 当前读与快照读

    前言 在这里记录一下一个博客,觉得写的很好 http://hedengcheng.com/?p=771 , 概念...

  • 快照读 当前读 MVCC

    MVCC MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它...

  • 快照读和当前读

    【MySQL】当前读、快照读、MVCChttps://www.cnblogs.com/wwcom123/p/107...

  • mysql 幻读

    在说幻读之前,首先要提一下什么是当前读和快照读当前读像select lock in share mode(共享锁)...

网友评论

      本文标题:8.2 快照读,当前读

      本文链接:https://www.haomeiwen.com/subject/epyjyqtx.html