【MySQL】当前读、快照读、MVCC

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 【MySQL】当前读、快照读、MVCC当前读:  select...lock in share mode (共享读锁)  select...for update  update , delete , insert  当前读, 读取的是最新版本, 并且对读取的记录加锁, 阻塞其他事务同时改动相同记录,避免出现安全问题。

【MySQL】当前读、快照读、MVCC
当前读:
  select...lock in share mode (共享读锁)
  select...for update
  update , delete , insert

  当前读, 读取的是最新版本, 并且对读取的记录加锁, 阻塞其他事务同时改动相同记录,避免出现安全问题。

  例如,假设要update一条记录,但是另一个事务已经delete这条数据并且commit了,如果不加锁就会产生冲突。所以update的时候肯定要是当前读,得到最新的信息并且锁定相应的记录。

当前读的实现方式:next-key锁(行记录锁+Gap间隙锁)
  间隙锁:只有在Read Repeatable、Serializable隔离级别才有,就是锁定那些范围空间内的数据,假设锁定id>3的数据,id有3,4,5,那么4,5和后面的数字都会被锁定,像6,7...,为什么要这样?因为如果我们不锁定没有的数据,当加入了新的数据id=6,就会出现幻读,间隙锁避免了幻读。

  对主键或唯一索引,如果select查询时where条件全部精确命中(=或者in),这种场景本身就不会出现幻读,所以只会加行记录锁。

快照读
  简单的select操作(不包括 select ... lock in share mode, select ... for update)。    

  Read Committed隔离级别:每次select都生成一个快照读。

  Read Repeatable隔离级别:开启事务后第一个select语句才是快照读的地方,而不是一开启事务就快照读。

快照读的实现方式:undolog和MVCC
  undolog:

  每行除了数据外 还有

  DB_TRX_ID: 6字节DB_TRX_ID字段,表示最后更新的事务id(update,delete,insert)。此外,删除在内部被视为更新,其中行中的特殊位被设置为将其标记为已软删除。
  DB_ROLL_PTR: 7字节回滚指针,指向前一个版本的undolog记录,组成undo链表。如果更新了行,则撤消日志记录包含在更新行之前重建行内容所需的信息。
  DB_ROW_ID: 6字节的DB_ROW_ID字段,包含一个随着新行插入而单调递增的行ID, 当由innodb自动产生聚集索引时,聚集索引会包括这个行ID的值,否则这个行ID不会出现在任何索引中。如果表中没有主键或合适的唯一索引, 也就是无法生成聚簇索引的时候, InnoDB会帮我们自动生成聚集索引, 聚簇索引会使用DB_ROW_ID的值来作为主键; 如果表中有主键或者合适的唯一索引, 那么聚簇索引中也就不会包含 DB_ROW_ID了 。

insert undo log: 只在事务回滚时需要, 事务提交就可以删掉了。

update undo log: 包括update 和 delete , 回滚和快照读 都需要。

  

  多版本并发控制MVCC:

  如图,开始只有最下面一行记录,

  当事务1更改该行记录时,会进行如下操作:

  事务1 先用排它锁锁住该行记录(当前读,读到最新数据然后独占),复制到undolog,即图中第二行记录;再更新字段, 把自己的事务id填入DB_TRX_ID, 让回滚指针DB_ROLL_PTR 指向undolog中修改前的原数据(开始只有最下面一行记录)
  事务2操作也是一样, 产生了第三行记录。

原文地址https://www.cnblogs.com/wwcom123/p/10727194.html

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL
|
3月前
|
Oracle 关系型数据库 MySQL
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
38 0
|
4月前
|
存储 缓存 关系型数据库
⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制
⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制
110 0
|
2月前
|
存储 SQL 关系型数据库
MySQL事务底层原理和MVCC机制
MySQL事务底层原理和MVCC机制
38 1
|
2月前
|
存储 关系型数据库 MySQL
mysql数据库 mvcc
mysql数据库 mvcc
|
2月前
|
存储 SQL 关系型数据库
MySQL - 深入理解 MySQL 的 MVCC 及实现原理
MySQL - 深入理解 MySQL 的 MVCC 及实现原理
191 0
|
2月前
|
存储 缓存 关系型数据库
Mysql 专栏 - MVCC机制
Mysql 专栏 - MVCC机制
65 0
|
3月前
|
关系型数据库 MySQL 数据库
【mysql】当前读和快照读,幻读和可重复读
【mysql】当前读和快照读,幻读和可重复读
64 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
89 1
|
8月前
|
算法 关系型数据库 MySQL
MySQL事务隔离实现原理,多版本并发控制MVCC
MySQL事务隔离实现原理,多版本并发控制MVCC
143 0