技术文摘
MySQL MVCC 中 UPDATE 后 SELECT 能读到已提交数据的原因
MySQL MVCC 中 UPDATE 后 SELECT 能读到已提交数据的原因
在 MySQL 的多版本并发控制(MVCC)机制下,我们常常会好奇,为什么执行 UPDATE 操作后,紧接着的 SELECT 能够读到已提交的数据。这背后涉及到 MVCC 复杂而精妙的设计原理。
MVCC 允许在同一时间点对同一数据存在多个版本。当一个事务执行 UPDATE 操作时,它并不会直接覆盖旧的数据版本,而是生成一个新的数据版本,并标记旧版本的可见性。旧版本的数据并不会立即被删除,而是在合适的时机由 MySQL 的垃圾回收机制清理。
当 UPDATE 操作完成并提交事务时,MySQL 会通过事务系统和存储引擎的协同工作来保证数据的可见性。事务系统会记录事务的提交时间和事务 ID。存储引擎在数据页中维护每个数据版本的元数据信息,这些信息包含了创建该版本的事务 ID 以及事务的提交状态。
当执行 SELECT 操作时,MVCC 机制会发挥作用。SELECT 语句会根据当前事务的启动时间来判断哪些数据版本是可见的。如果 UPDATE 操作的事务已经提交,那么它所生成的新数据版本对于后续启动的事务来说是可见的。这是因为 MVCC 通过对比事务的启动时间和数据版本的创建事务的提交时间来决定数据的可见性。如果创建数据版本的事务已经提交,且当前事务的启动时间在其提交之后,那么这个新的数据版本就是可见的。
例如,事务 A 对某条记录执行 UPDATE 操作并提交,此时生成了新的数据版本。之后事务 B 启动并执行 SELECT 操作,由于事务 B 的启动时间在事务 A 提交之后,MVCC 机制会判定事务 A 生成的新数据版本对于事务 B 是可见的,所以事务 B 能够读取到已更新的数据。
MySQL MVCC 中 UPDATE 后 SELECT 能读到已提交数据,是事务系统和存储引擎协同工作,依据事务时间戳和数据版本可见性规则共同作用的结果,这一机制极大地提升了数据库的并发性能和数据一致性。
TAGS: update操作 SELECT查询 MySQL MVCC 已提交数据
- Win7 电脑文件无法复制至 U 盘的解决办法
- Win7 去除图标箭头的方法
- Win7 系统建立点对点网络连接的方法与操作步骤
- Win7 系统中搜狗输入法无法使用的解决办法
- 解决 win7 电脑硬盘参数错误的具体办法
- Win7 系统优化的完备方案
- Win7 系统中磁盘脱机状态的解决办法
- Win7 系统中开启 SMB 服务的方法
- Win7 系统双击文件夹无法打开的解决办法与处理流程
- win7 电脑提示无法访问 application data 的解决办法
- Win7 电脑修改 Hosts 文件屏蔽网站的图文指引
- 微软终止支持 Win7 的含义及终止支持后能否继续使用
- 解决 Win7 系统提示未找到 bcrypt.dll 的办法
- Win7 系统安装 iTunes 程序失败的解决办法
- Win7 盗版系统能否免费升级至 Win10