千家信息网

mysql多版本并发控制MVCC的实现

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,事务隔离级别设置set global transaction isolation level read committed; //全局的set session transaction isolatio
千家信息网最后更新 2025年11月11日mysql多版本并发控制MVCC的实现

事务隔离级别设置

set global transaction isolation level read committed; //全局的set session transaction isolation level read committed; //当前会话

修改事务提交方式(是否自动提交,mysql默认自动提交)

SET AUTOCOMMIT = 1; //自动提交,为0手动提交

不同数据库引擎MVCC模式各不相同,典型有乐观和悲观并发控制。

innodb

说明:

InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号(system version number).每开始个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的

SELECT

InnoDB会根据以下两个条件检查每行记录:

a. InnoDB只查找版本早于当前事务版本的数据行(也就是,行的系统版本号小于或等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插人或者修改过的。

b.行的删除版本要么未定义,要么大于当前事务版本号。这可以确保事务读取到的行,在事务开始之前未被删除。

只有符合上述两个条件的记录,才能返回作为查询结果。

INSERT

InnoDB为新插人的每行 保存当前系统版本号作为行版本号。

DELETE

InnoDB为删除的每行保存当前系统版本号作为行删除标识。

UPDATE

InnoDB为插人行新记录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。

注意:

MVCC只在REPEATABLE READ 和READ COMMITED 两个隔离级别下工作。其他两个隔离级别都和MVCC不兼容法,因为READ UNCOMITTED总是读取最新的数据行,而不是符合当前事务版本的数据行。而SERIALIZABLE则会对所有读取的行都加锁。

查看当表的状态

show table status like 'task'\G;

脏读、不可重复读、幻读

脏读:当前事务读到了另一个事务未提交的状态,事务没有实现隔离。

不可重复读:实现了事务的隔离性,但两次读取同一条数据的时候发现数据不一致了。

幻读:两次查询同一批数据,发现有新数据被插入,主要是因为中途有其他事务对数据集进行了插入操作。(加了间隙锁解决该问题)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

事务 版本 数据 系统 两个 隔离 时间 要么 级别 查询 条件 标识 状态 控制 不同 相同 一致 乐观 悲观 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库跨域导入数据 重庆机电维修与设备管理软件开发 魔兽世界免费转服务器要多少钱 网络安全应急指挥中心督查 宁海ios软件开发项目 如果服务器显示没联网怎么修 软件开发完后的软件维修费 斗罗大陆斗神再临官服服务器名称 数据库技术应用实践报告 sony未找到影像数据库 psp无法与服务器 青岛服务器定制哪家好 服务器安全防范措施有哪些 江西管理系统软件开发 浙江长兴有哪些软件开发公司 异地数据库同步 网络安全中的风险有哪些 手指解锁网络安全 职校计算机网络技术 闵行区网络技术服务诚信推荐 鄂州软件开发 信息网络安全管理制度 mt多媒体服务器下载 万方数据库知识服务平台的特点 外包录入软件开发 杭州应用软件开发哪家信誉好 青岛服务器定制哪家好 web服务器配置及管理 Tbc一个服务器能容纳多少人 节奏大师说账号与服务器断开
0