Mysql学习之各种锁

news2024/9/24 1:23:18

事务的隔离性由锁来实现
在这里插入图片描述
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.coloradmin.cn/o/1483703.html

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

相关文章

git代码上库流程(一篇就够了)

文章目录 一、前言二、创建新分支三、修改代码四、合并分支 一、前言 多人协同开发一个项目,为了方便管理代码,每个人代码提交不冲突。git代码仓库管理是不可或缺的。对于新手来说,既不懂git原理又不懂底层逻辑,还经常错误提交代码…

10s用递归实现反转链表(JAVA)

目录 1. 原理 1.1 问题 1.2 解决 1.3 终点 2.代码操作及讲解 2.1 演示代码 2.2 讲解 1. 原理 反转 A->B->C 1.1 问题 当反转A->B的链接时,当B改成指向A(B->A), 就找不到C了; 1.2 解决 所以需要一个变量临时…

uniapp_小程序选项卡(直接下载安装即可)

选项卡 - DCloud 插件市场 也可加一行变成三栏

Java集合相关面试题(2024大厂高频面试题系列)

1、说一说Java提供的常见集合?(画一下集合结构图) 在java中提供了量大类的集合框架,主要分为两类: 第一个是Collection 属于单列集合,第二个是Map 属于双列集合 在Collection中有两个子接口List和Set。…

Kubernetes/k8s的核心概念

一、什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词,也就是“k8s”&#xff…

Page Object模式:为什么它是Web自动化测试的必备工具

为 UI 页面写测试用例时(比如 web 页面,移动端页面),测试用例会存在大量元素和操作细节。当 UI 变化时,测试用例也要跟着变化, PageObject 很好的解决了这个问题。 使用 UI 自动化测试工具时(包…

电子电气架构——汽车以太网诊断路由汇总

电子电气架构——汽车以太网诊断路由汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将…

lottie加载带图片的json 预览

背景 产品看到一款app的动效很不错,让我去模仿实现。 第一步 获取apk中的静态资源 拿到这个app的apk后,直接使用压缩工具解压, assets文件夹就是静态资源的目录 静态资源里面有lottie 那么大部分的动效应该都是lottie实现的 网上找了很多…

蓝桥杯Java B组历年真题(2013年-2021年)

一、2013年真题 1、世纪末的星期 使用日期类判断就行,这里使用LocalDate,也可以使用Calendar类 答案 2099 使用LocalDate import java.time.LocalDate; import java.time.format.DateTimeFormatter; // 1:无需package // 2: 类名必须Main, 不可修改p…

配置MySQL与登录模块

使用技术 MySQL,Mybatis-plus,spring-security,jwt验证,vue 1. 配置Mysql 1.1 下载 MySQL :: Download MySQL Installer 1.2 安装 其他页面全选默认即可 1.3 配置环境变量 将C:\Program Files\MySQL\MySQL Server 8.0\bin…

Flink状态存储-StateBackend

文章目录 前言一、MemoryStateBackend二、FSStateBackend三、RocksDBStateBackend四、StateBackend配置方式五、状态持久化六、状态重分布OperatorState 重分布KeyedState 重分布 七、状态过期 前言 Flink是一个流处理框架,它需要对数据流进行状态管理以支持复杂的…

猫头虎分享已解决Bug || AttributeError: ‘str‘ object has no attribute ‘decode‘

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

pycharm专业版本的安装

一 、到官网下载对应的pycharm安装包 也可以把安装软件(用物理机下载到共享文件夹) 然后进入Ubuntu系统把下载大的安装包剪贴到目标路径 1 在ubuntu中创建一个用来存放pycharm安装包的文件夹 rootzmq-virtual-machine:/home/zmq/Desktop# mkdir pycha…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的教室人员检测与计数(Python+PySide6界面+训练代码)

摘要:开发教室人员检测与计数系统对于优化教学资源和提升教学效率具有重要意义。本篇博客详细介绍了如何利用深度学习构建此系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5的性能,展示…

初识Maven

介绍: web后端开发技术ApacheMaven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。安装:http://maven.apache.org/ Apache软件基金会,成立于19…

Leetcode42. 接雨水 -hot100

题目&#xff1a; 代码(首刷自解 2024年3月2日 有3个案例超时&#xff09;&#xff1a; 不算完全做出来&#xff0c;看了答案了&#xff0c;等以后二刷吧 class Solution { public:int helper(const vector<int>& height,const int high) {for(int i 0; i < hei…

对单元测试的思考(稳定性建设)

单测是很常见的技术的名词&#xff0c;但背后的逻辑和原理你是否清楚&#xff0c;让我们一起review一下。 1. 单测是什么&#xff1f;&#x1f914; 单测是单元测试,主要是测试一个最小逻辑块。比如一个函数、一个react、vue 组件。 2.为什么要写单测&#xff1f;&#x1f9…

扩展学习|大数据分析的现状和分类

文献来源&#xff1a;[1] Mohamed A , Najafabadi M K , Wah Y B ,et al.The state of the art and taxonomy of big data analytics: view from new big data framework[J].Artificial Intelligence Review: An International Science and Engineering Journal, 2020(2):53. 下…

windows系统下安装RabbitMQ

一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的操作&#xff0c;选择两者版本时一定要参考版本的兼容性 1.RabbitMQ国内下载地址&#xff0c;因官网下载比较缓慢&#xff0c;还是国内的稍微快些 https://r…

CTFHUB--文件包含漏洞--RCE

文件包含漏洞 文件包含漏洞也是一种注入型漏洞&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务端执行。有时候由于网站功能需求&#xff0c;会让前端用户选择要包含的文件&#xff0c;而开发人员又没有对要包含的文件进行安全考虑&#xff0c;…