MySQL的两阶段所协议2PL

【数据库技术】2PL(两阶段锁)下的死锁与饥饿处理手段 事务处理-2PL下的死锁与饥饿2PL——2阶段锁存在的问题一、死锁与等待图1. 死锁(Deadlock)2. 等待图(Wait-for graph)二、死锁的处理手段1. 死锁预防2. 死锁检测总结 2PL——2阶段锁存在的问题 两阶段锁协议通常包括扩张和收缩两个阶段。在扩张阶段,事务将获取锁,但不能释放任何锁。在收缩阶段,可以释放现有的锁,但不能获取新的锁。上图是一个典型的遵循2PL协议的序列表。看似严格保证了序列化,但实际存在着死锁的风险。 例如:当T1’在扩张阶段,获取了Y的读锁,并读取了Y,此时 阅读详情
微信搜索『coder-home』,或者扫一扫右侧的二维码,关注『程序猿集锦』。
了解更多干货分享,还有各类视频教程。
扫描它,带走我。

背景

经常听到别人说2PL,猛的一听当时真的是一脸懵逼的感觉,啥意思?2PL是什么玩意?后来又听人说两阶段锁协议,这个又是什么?我咋没有听过呢?

后来才知这是MySQL中的一个术语:2PL(Two-phase locking),翻译成中文就是两阶段锁协议。

废话不多说,我们来用实际的例子体验一把。

准备实验环境

实验的前提条件:

  • RR可重复读事务隔离级别
  • MySQL的版本是5.7.24
  • 使用innodb存储引擎的表来测试

建表语句

实验使用到的表结构如下所示:

CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `name` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

初始化数据

此次实验中使用到的初始化数据如下所示:

insert into t(id, name) values(1, 'A');
insert into t(id, name) values(2, 'B');
insert into t(id, name) values(3, 'C');
insert into t(id, name) values(4, 'D');

最终环境

最后准备的环境如下:
在这里插入图片描述

实验

实验步骤

我们来简单说一下实验的具体步骤:

  1. 开启一个左侧的事务。
  2. 开启一个右侧的事务。
  3. 在左侧事务中查询表t中的所有数据。
  4. 在右侧事务中查询表t中的所有数据。
  5. 在左侧事务中,获取id=3的数据行的X锁。
  6. 在左侧事务中,更新id=3的数据行内容。
  7. 在左侧事务中,查询更新后的id=3的数据行内容。
  8. 在左侧事务中,获取id=2的数据行的X锁。
  9. 在右侧事务中,尝试获取id=3的数据行的X锁,获取失败。

实验截图

实验的截图如下所示:
在这里插入图片描述

问题:为什么在第9步中,没有获取到id=3的数据行的X锁呢?按道理左侧的事务已经修改完成了id=3的数据行,它已经去获取了id=2的数据行的X锁了,id=3的竖行的X锁对它已经没有用了,为什么在右侧事务中仍然不能获取到id=3的数据行的X锁呢?

答案:MySQL中的两阶段锁协议的工作机制就是这么设计的。

总结

在MySQL中,两阶段锁协议的含义是:当一个事务获取到了某一个数据库对象的锁之后,并不是当前事务不需要操作它了之后,这个锁就会马上释放掉,这个锁会一直被这个事务持有,直到这个事务被提交或回滚后,这个锁才会被释放掉。所以,在当前事务还没有结束的时候,任何其他事务尝试获取这个锁的时候,都会被阻塞。知道当前事务提交或回滚后,前提事务才可以获取到这把锁。

这就是MySQL中2PL两阶段锁协议的含义。它在事务并发的时候,为数据的一致性提供有力的保障。

微信搜索『coder-home』,或者扫一扫右侧的二维码,关注『程序猿集锦』。
了解更多干货分享,还有各类视频教程。
扫描它,带走我。
【Pytorch】DCGAN实战(三):二次元动漫头像生成 文章目录1.实现效果2.环境配置2.1Python2.2Pytorch、CUDA2.3Python IDE3.具体实现3.1数据预处理(data.py)(1)导入包(2)定义数据类3.2模型Generator,Discriminator,权重初始化(model.py)(1)导入包(2)Generator(3)Discriminator(4)权重初始化3.3网络训练(net.py)(1)导入包(2)创建类3.4 主函数(main.py)(1)导入文件(2)定义超参数(3)实例化(4)进行训练4.训练过程4.1 阅读详情

相关推荐

Halcon像素比例标定(误差大)-相机标定

一种简易标定: 像素比例标定,如果需要精确一些则需要在高度和宽度上都需要计算,然后求出比例系数。需要高精度标定板和相机,以及多次标定才能达到稳定的状态,这种标定简单,但是误差大。 read_image (Img0008, 'D:/00项目代码/000视觉软件/02Halocn算法20190501/04测量20190424/07_比例计算测量标定/IMG0008.jpg') rgb1_to_...

SSSS的博客 3984

【数据库系统原理复习】两阶段锁定协议 2PL/ strict 2PL/ rigorous 2PL

两阶段锁定协议 2PL,全称Two-Phase Locking Protocol。这个协议可以保证冲突可串行化conflict serializability 但是不可以保证避免死锁。

weixin_63160898的博客 4433

NSIDC海冰运动产品-速度矢量场图绘制(数据下载和处理--年、季节平均)【python/basemap】

入门级NSIDC海冰运动产品速度矢量场图绘制(数据下载和处理--年、季节平均)【python/basemap】

Mluoo的博客 2959

8 张图,给你完整的剖析 MySQL 两阶段加锁(2PL)协议

编辑:业余草来源:https://www.xttblog.com/?p=4911前言此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL...

xmt1139057136的专栏 5621

SAP MM采购合同创建全解析:ME31K操作与后台逻辑

在SAP ERP的物料管理模块中,采购合同作为框架协议的核心,定义了企业与供应商之间的长期供货关系。它与采购订单不同,合同不直接产生收货或发票,而是为后续采购订单提供数据源。创建合同(事务码ME31K)时,需要区分数量合同与金额合同,并维护抬头、行项目、有效期、价格条件和税码等关键信息。SAP通过源确定机制在创建采购订单时自动匹配合同,同时审批策略、编码范围和输出类型也会影响合同的实际可用性。掌握合同创建逻辑,能有效解决采购订单无法带出合同、审批未触发、价格缺失等高频问题。从ME31K实操出发,系统梳理采购

weixin_30000735的博客 196

DM9000有线网卡驱动编写

DM9000有线网卡驱动编写 1.DM9000简介   DM9000 是一款完全集成的、性价比高、引脚数少、带有通用处理器接口的单芯片快速以太网控制器。 自 带一个 10/100M PHY 和 4K 双字的 SRAM ,DM9000A 为适应各种处理器提供了 8 位、16 位数据接口访问 内部存储器,DM9000 拥有自动协商功能,DM9000 特性如下:   1.集成自适应 10/100M 收发器。   2.内置 16k 字节的 SRAM。   3.支持硬件帧校验。   4.兼容 3.3V 和 5.0V

weixin_44453694的博客 4672

2PL协议,两段封锁协议

two-phase locking protocol 2PL协议,两段封锁协议 Two-phase transaction and two-phase locking protocol 在一个事务中,如果加锁动作都在释放锁动作之前称此事务为两段事务。上述加锁的限制称两段封锁协议。两段事务可截然为两段:拥有的锁增长阶段growing phase),拥有的锁缩减段段(shrinking pha

China学习者 1万+

COMSOL实现裂缝性储层油水两相流模拟的关键技术

多孔介质中的流体流动模拟是油气藏开发的核心技术,其基本原理基于达西定律和质量守恒方程。在裂缝性储层中,离散裂缝网络与基质系统的耦合流动带来了特殊的数值挑战。通过COMSOL Multiphysics平台实现的多物理场耦合技术,可以精确模拟油水两相在复杂裂缝系统中的渗流行为。该技术采用Level Set方法表征裂缝几何形态,结合自适应网格生成技术解决狭窄裂缝的网格剖分难题,并创新性地引入Bang-Larsen毛管压力滞后模型,显著提高了采收率预测精度。这些方法在致密油藏开发、水驱优化等工程实践中具有重要应用价

weixin_34005090的博客 229

【数据库理论】并发控制技术 - 两阶段锁协议(2PL)

避免数据竞争最常用的方式就是通过锁机制,这是一种典型的悲观并发控制策略。S-Lock(D)X-Lock(D)Unlock(D)读写问题与共享-互斥锁问题在本质上是相同的,都是围绕对公共资源的读写操作中可能产生的冲突建模。在读写问题中,只有“读–读”操作不会发生冲突;对应地,在共享-互斥锁模型中,只有共享锁(S 锁)之间是相容的,其它组合均可能冲突。多个事务可以同时对数据项 D 加共享锁(S锁),此时若有事务尝试加互斥锁(X锁),则必须等待所有S锁释放后才能获取。

Hominid_Pro的博客 999

图解转置卷积原理

声明:本文大部分搬运自【机器学习】详解 转置卷积 (Transpose Convolution) 感谢博主花与人间事同,本人只是在博主原创文章上做补充以及添加一些自己的理解。 1 转置卷积的背景 通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,称为上采样 (Upsample),如下图所示: 上采样方法有很多,详见【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值

laonafahaodange的博客 5686

华为OD机试双机位C卷 - 高矮个子排队 (C++/Py/Java/Js/Go/C)

华为OD机试双机位C卷 高矮个子排队,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 高矮个子排队。

qq_45776114的博客 2160

mysql两段锁协议写法_MySql 两阶段加锁(2PL)协议剖析

前言此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:主要用于分布式事务。MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。什么时候会加锁在对记录更新操作或者(select for up...

weixin_28672681的博客 889

Linux安装Docker(图文解说详细版)

第一步,下载docker 下载地址: https://download.docker.com/linux/static/stable/x86_64/ 这次的演示我们使用docker-18.06.3-ce.tgz 这个版本 第二步,上传到云服务器上面 使用rz命令上传或者fltp工具进行上传 第三步,解压文件 第四步,将解压出来的docker文件复制到 /usr/bin/ 目录下 这么做的目的是将docker交给linux自己去管理,类似spring中的ioc(猜测,非正经知识) cp docker

编码人生 1万+

mysql两阶段锁协议_MySql两阶段加锁(2PL)协议剖析

前言本文主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:主要用于分布式事务。MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。什么时候会加锁在对记录更新操作或者(select for upda...

weixin_30995429的博客 1018

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mysql谓词演算_8 张图,给你完整的剖析 MySQL 两阶段加锁(2PL)协议

编辑:业余草来源:https://www.xttblog.com/?p=4911前言此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:主要用于分布式事务。MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySq...

weixin_34552525的博客 181

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

mysql两阶段锁协议_MySql-两阶段加锁协议

MySql-两阶段加锁协议前言此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:主要用于分布式事务。MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。什么时候会加锁在对记录更新操作或者(...

weixin_31600439的博客 495

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

mysql 两阶段加锁_MySql-两阶段加锁协议

#MySql-两阶段加锁协议 ##前言 此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:主要用于分布式事务。MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。 ##什么时候会加锁 在对...

weixin_39556590的博客 176

MySql-两阶段加锁协议

此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下: 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。 2PC,两阶段提交协议:主要用于分布式事务。 MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。 什么时候会加锁 在对记录更新操作或者(s

qq4165498的博客 4133

mysql双重协议_详解MySQL两阶段加锁协议

前言此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:主要用于分布式事务。MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。什么时候会加锁在对记录更新操作或者(select for up...

weixin_42556197的博客 258

mysql lockmodel_详解MySQL两阶段加锁协议

前言此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:主要用于分布式事务。MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。什么时候会加锁在对记录更新操作或者(select for up...

weixin_39999025的博客 332

mysql中的两段锁协议和三级封锁协议

两段锁协议 一个事务中一旦开始释放锁,就不能再申请新锁了。事务的加锁和解锁严格分为两个阶段,第一阶段加锁,第二阶段解锁。 目的 :”引入2PL是为了保证事务的隔离性,保证并发调度的准确性,多个事务在并发的情况下依然是串行的。 封锁定理: 如果事务是良构的且是两阶段的,那么任何一个合法的调度都是隔离的。 2PL和2PC **2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。**主要是在My...

mulinsen77的博客 8163

mysql两阶段锁_<转>MySql-两阶段加锁协议

MySql-两阶段加锁协议前言此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:主要用于分布式事务。MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。什么时候会加锁在对记录更新操作或者(...

weixin_30737431的博客 217

Mysql的两阶段锁协议

mysql的事务为什么需要两阶段锁协议?两阶段锁协议是什么?在mysql优化中如何利用两阶段锁的特性提交mysql并发量?

weixin_35794878的博客 4295

<转>MySql-两阶段加锁协议

MySql-两阶段加锁协议 前言 此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下: 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。 2PC,两阶段提交协议:主要用于分布式事务。 MySql本身针...

204

MySQL两阶段加锁

此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下: 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。 2PC,两阶段提交协议:主要用于分布式事务。 MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。 什么时候会加锁 在对记录更新操作或者(select ...

Xjzzon的博客 752
上一篇: MySQL如何按周统计表中数据
下一篇: MySQL中如何按周统计表中的数据
程序猿集锦
博客等级 码龄18年 55粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值