Mysql学习之各种锁

事务的隔离性由锁来实现
在这里插入图片描述
MySQL并发事务访问相同记录
并发事务访问相同记录的情况大致可以分为3种:
读-读的情况
读-读情况,即并发事务相继读取相同的记录。读取操作本身不会对记录由有任何的影响,并不会引起什么问题,所以允许这种情况的发生。
写-写的情况
写-写情况,即并发事务相继对相同的记录做出改动。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
读-写或写-读情况
读-写或写-读,即一个事务进行读取操作,另一个进行改动操作,这种情况下产生脏读、不可重复读、幻读的问题
怎么解决脏读、不可重复读、幻读这些问题呢?其实有两种可选的解决方案:
方案1:读操作利用多版本并发控制(MVCC) ,写操作利用加锁
在这里插入图片描述
方案2:读、写操作都采用加锁的方式
在这里插入图片描述
锁的不同角度分类
在这里插入图片描述
从数据操作的类型划分:读锁、写锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从数据操作的粒度划分:表级锁、页级锁、行锁
在这里插入图片描述
在这里插入图片描述
表级锁
在这里插入图片描述
意向锁
在这里插入图片描述
意向锁要解决的问题
在这里插入图片描述
在这里插入图片描述
意向锁的并发性
意向锁不会与行级的共享/排他锁互斥!正因为如此,意向锁并不会影响到多个事务对不同数据行加排他锁时的并发性(不然我们直接用普通的表锁就行了)
在这里插入图片描述
自增锁(AUTO-INC锁)
在这里插入图片描述
元数据锁
在这里插入图片描述
在这里插入图片描述

InnoDB中的行锁

行锁(Row Lock)也称为记录锁,顾名思义,就是锁住某一行(某条记录Row)。需要注意的是,Mysql服务器并没有实现行锁机制,行级锁只在存储引擎层实现。
优点:锁定力度小,发生锁冲突概率低,可以实现的并发度高
缺点:对于锁的开销比较大,加锁会比较慢,容易出现死锁
InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用行级锁

记录锁(Record Locks)
在这里插入图片描述在这里插入图片描述
间隙锁(Gap Locks)
Mysql在Repeatable Read 隔离界别下是可以解决幻读问题的,解决方案有两种,可以采用MVCC方案解决,也可以采用加锁方案解决。但是在使用加锁方案解决时有个一大问题,就是事务在第一次执行读取操作的时候,那些幻影记录尚不存在,我们无法给这些幻影记录 加上记录锁。InnoDB提出了一种称之为Gap Locks的锁,官方的类型名称为:LOCK_GAP
在这里插入图片描述
id值为8的记录加了gap锁,意味着不允许别的事务在id值为8的记录前边的间隙插入新的记录
gap锁的提出仅仅是为了防止插入幻影记录而提出的,虽然有共享gap锁独占gap锁的说法,但是他们起到的作用是相同的。而且如果对一条记录加了gap锁(不论是共享gap锁还是独占gap锁),并不会限制其他事务对这条记录加记录锁或者继续加gap锁。
在这里插入图片描述
在这里插入图片描述
间隙锁扩大了锁住的范围,可能会引起死锁
在这里插入图片描述

临键锁(Next-Key Locks)
临键锁=记录锁+间隙锁
在这里插入图片描述
插入意向锁(Insert Intention Locks)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述页锁
在这里插入图片描述

从对待锁的态度划分为:乐观锁、悲观锁

从对待锁的态度来看锁的话,可以将锁分为乐观锁和悲观锁,从名字可以看出这两种锁是两种看待数据并发的思维方式。需要注意的是,乐观锁和悲观锁并不是锁,而是锁的设计思想

悲观锁(数据库的锁层面) 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
乐观锁(程序层面)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
两种锁的适用场景
在这里插入图片描述

按照加锁的方式划分:显式锁、隐式锁

隐式锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他锁之-全局锁
在这里插入图片描述
其他锁之死锁
两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己的锁

在这里插入图片描述

在这里插入图片描述
如何处理死锁
方式1:等待,直到超时(innodb_lock_wait_timeout=50s)
在这里插入图片描述
方式2:使用死锁检测进行死锁处理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

锁的内存结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
type_mode的信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
锁监控

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

视频链接:B站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简要讲解OV7725摄像头

本文主要包含以下几部分内容: 1. 通过OV7725分析模块原理图。 2. 讲解部分寄存器的含义、RGB565格式图像输出时序、帧率计算。 3. 讲解SCCB协议与I2C协议的区别。 1、OV7725功能 OV7725是一款1/4英寸单芯片图像传感器,其感光阵列达到640*480&#xff0c…

【MySQL 系列】在 Windows 上安装 MySQL

在 Windows 平台上安装 MySQL 很简单,并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 文章目录 1、下载 MySQL 安装程序2、安装 MySQL 数据库2.1、选择安装类型2.2、检查所需组件2.3、安装所选产品组件2.4、产品配置2.5、配置高可用性2.6、配置服务器类型…

【leetcode】 剑指 Offer学习计划(java版本含注释)(下)

目录 前言第十六天(排序)剑指 Offer 45. 把数组排成最小的数(中等)剑指 Offer 61. 扑克牌中的顺子(简单) 第十七天(排序)剑指 Offer 40. 最小的k个数(简单) 第…

YOLO系列中的“data.yaml”详解!

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、data.yaml介绍 YOLO系列中的data.yaml文件包含了YOLO系列模型运行所需要的数据集路径、数据集中的类别数及标签。数据集路径可以用绝对路径也可以…

如何在飞书接入ChatGPT并结合内网穿透实现公网远程访问智能AI助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中…

GEE代码条带问题——sentinel-1接缝处理的问题

问题 我有兴趣确定 NDVI 损失最大的年份。我创建了一个函数来收集所有陆地卫星图像并应用预处理。当我导出结果以识别 NDVI 损失最大年份时,生成的数据产品与陆地卫星场景足迹有可怕的接缝线。造成这种情况的原因是什么以及如何调整代码? sentinel1数据…

flutter之终极报错

看到这个报错头都大了 一开始在网上各种搜搜,然后有人说是flutter版本的问题,改完版本之后还是不对,又是各种搜搜搜 有人说是环境变量的问题,后来改了环境变量,妈的,竟然还不行,想砸电脑的心都…

Xcode :Could not build module ‘WebKit‘ 已验证解决

问题&#xff1a;Could not build module WebKit 具体报错如下&#xff1a; error: type argument nw_proxy_config_t (aka struct nw_proxy_config *) is neither an Objective-C object nor a block type property (nullable, nonatomic, copy) NSArray<nw_proxy_config_…

C++学习笔记:set和map

set和map set什么是setset的使用 关联式容器键值对 map什么是mapmap的使用map的插入方式常用功能map[] 的灵活使用 set 什么是set set是STL中一个底层为二叉搜索树来实现的容器 若要使用set需要包含头文件 #include<set>set中的元素具有唯一性(因此可以用set去重)若用…

掌握未来技术:一站式深度学习学习平台体验!

介绍&#xff1a;深度学习是机器学习的一个子领域&#xff0c;它模仿人脑的分析和学习能力&#xff0c;通过构建和训练多层神经网络来学习数据的内在规律和表示层次。 深度学习的核心在于能够自动学习数据中的高层次特征&#xff0c;而无需人工进行复杂的特征工程。这种方法在图…

大模型笔记:RAG(Retrieval Augmented Generation,检索增强生成)

1 大模型知识更新的困境 大模型的知识更新是很困难的&#xff0c;主要原因在于&#xff1a; 训练数据集固定,一旦训练完成就很难再通过继续训练来更新其知识参数量巨大,随时进行fine-tuning需要消耗大量的资源&#xff0c;并且需要相当长的时间LLM的知识是编码在数百亿个参数中…

一些C语言知识

C语言的内置类型&#xff1a; char short int long float double C99中引入了bool类型&#xff0c;用来表示真假的变量类型&#xff0c;包含true&#xff0c;false。 这个代码的执行结果是什么&#xff1f;好好想想哦&#xff0c;坑挺多的。 #include <stdio.h>int mai…

STM32(5) GPIO(2)输出

1.点亮LED 1.1 推挽接法和开漏接法 要想点亮LED&#xff0c;有两种接法 推挽接法&#xff1a; 向寄存器写1&#xff0c;引脚输出高电平&#xff0c;LED点亮&#xff1b;向寄存器写0&#xff0c;引脚输出低电平&#xff0c;LED熄灭。 开漏接法&#xff1a; 向寄存器写0&…

《精益DevOps》:填补IT服务交付的认知差距,实现高效可靠的客户期望满足

写在前面 在当今的商业环境中&#xff0c;IT服务交付已经成为企业成功的关键因素之一。然而&#xff0c;实现高效、可靠、安全且符合客户期望的IT服务交付却是一项艰巨的任务。这要求服务提供商不仅具备先进的技术能力&#xff0c;还需要拥有出色的组织协作、流程管理和态势感…

UniApp项目处理小程序分包

目前 uniApp也成为一种 App端开发的大趋势 因为在目前跨端 uniApp可以说相当优秀 可以同时兼容 H5 PC 小程序 APP 的技术 目前市场屈指可数 那么 说到微信小程序 自然就要处理分包 因为微信小程序对应用大小限制非常铭感 限制在2MB 超过之后就会无法真机调试与打包 不过需要注…

vue项目中使用antvX6新手教程,附demo案例讲解(可拖拽流程图、网络拓扑图)

前言&#xff1a; 之前分别做了vue2和vue3项目里的网络拓扑图功能&#xff0c;发现对antv X6的讲解博客比较少&#xff0c;最近终于得闲码一篇了&#xff01; 需求&#xff1a; 用户可以自己拖拽节点&#xff0c;节点之间可以随意连线&#xff0c;保存拓扑图数据后传给后端&…

cPanel面板安装付费的SSL证书

前不久遇到购买Hostease服务器的客户反馈需要安装SSL证书。因为安装 SSL 证书不仅可以保护用户数据安全&#xff0c;增加用户信任度&#xff0c;提升搜索引擎排名&#xff0c;还有助于符合法规和标准&#xff0c;防止网络攻击。 安装SSL证书可以通过如下步骤: 1. 选择 SSL 证书…

数学建模【多元线性回归模型】

一、多元线性回归模型简介 回归分析是数据分析中最基础也是最重要的分析工具&#xff0c;绝大多数的数据分析问题&#xff0c;都可以使用回归的思想来解决。回归分析的任务就是&#xff0c;通过研究自变量X和因变量Y的相关关系&#xff0c;尝试去解释Y的形成机制&#xff0c;进…

Linux配置网卡功能

提示:工具下载链接在文章最后 目录 一.network功能介绍二.配置network功能2.1 network_ip配置检查 2.2 network_br配置2.2.1 配置的网桥原先不存在检查2.2.2 配置的网桥已存在-修改网桥IP检查2.2.3 配置的网桥已存在-只添加网卡到网桥里检查 2.3 network_bond配置检查 2.4 netw…

Access AR Foundation 5.1 in Unity 2022

如果已经下载安装了ARF但版本是5.0.7 可以通过下面的方式修改 修改后面的数字会自动更新 更新完成后查看版本 官方文档 Access AR Foundation 5.1 in Unity 2021 | AR Foundation | 5.1.2