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站

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SQL注入】宽字节注入原理讲解

一、addslasehes()转义函数 addslashes() 是 PHP 中用于转义字符串中的特殊字符的函数之一。它会在指定的预定义字符(单引号、双引号、反斜线和 NUL 字符)前面添加反斜杠,以防止这些字符被误解为代码注入或其他意外操作。 1. 用法 string …

对程序、进程、线程、并发、并行、高并发概念的讲解

一、概述 程序、进程、线程、并发、并行和高并发是计算机科学领域中非常重要的概念。 了解进程、线程、并发和并行的概念,可以更好地利用计算机的多核处理器和并行计算能力,提高计算机性能。 了解进程和线程为操作系统中的资源管理提供了基础&#xff…

Springboot+vue的考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

【MySQL】表的约束——空属性、默认值、列描述、zerofill、主键、自增长、唯一键、外键

文章目录 MySQL表的约束1. 空属性2. 默认值3. 列描述4. zerofill5. 主键6. 自增长7. 唯一键8. 外键 MySQL 表的约束 MySQL中的表的约束是一种规则,用于限制或保护表中数据的完整性和合法性。约束可以确保数据在插入、更新或删除时满足特定的条件,从而维护…

笨办法学 Python3 第五版(预览)(一)

原文:Learn Python the Hard Way, 5th Edition (Early Release) 译者:飞龙 协议:CC BY-NC-SA 4.0 模块 1:Python 入门 练习 0:准备工作 这个练习没有代码。这只是你完成的练习,让你的计算机运行 Python。…

Web开发学习-HTML

第一天 固定结构 如何注释&#xff1a;vs code中使用ctrl/可以达到注释这一行的效果&#xff0c;同时再次按下ctrl/&#xff0c;可以取消注释。 HTML标签的结构 例如&#xff1a;<strong>字体加粗</strong>这个就是双标签&#xff0c;<br>换行标签&#xff…

Unity 常用的4种灯光、制作镜子、灯光的调用修改数值、

创建灯光时&#xff0c;一般用4种&#xff1a;定向光、点光源、聚光、区域光、 定向光&#xff1a;太阳 点光源&#xff1a;灯泡 聚光灯&#xff1a;手电筒 区域光&#xff1a;烘焙-贴图 灯光选择已烘焙 需要先选择被烘焙的物体&#xff0c;然后再选择Contribute GI 等待进…

记录一次自己的服务器迁移过程

记录一次自己的服务器迁移过程 记录一次自己的服务器迁移过程 前言目前项目的部署方式开始迁移 提前准备设置安全组开始初始化安装 docker尝试部署数据库迁移 结尾一些问题 为什么中间没有配置 https?关于数据库备份 前言 最近阿里云发动了史上最大力度价格战&#xff0c…

hive中spark SQL做算子引擎,PG作为MetaDatabase

简介 hive架构原理 1.客户端可以采用jdbc的方式访问hive 2.客户端将编写好的HQL语句提交&#xff0c;经过SQL解析器&#xff0c;编译器&#xff0c;优化器&#xff0c;执行器执行任务。hive的存算都依赖于hadoop框架&#xff0c;所依赖的真实数据存放在hdfs中&#xff0c;解析…

详解 JavaScript 中的数组

详解 JavaScript 中的数组 创建数组 注&#xff1a;在JS中的数组不要求元素的类型&#xff0c;元素类型可以一样&#xff0c;也可以不一样 1.使用 new 关键字创建 let array new Array()2.使用字面量方式创建(常用) let array1 [1,2,3,"4"]获取数组元素 使用下…

用numpy搭建自己的神经网络

搭建之前的基础与思考 构建模型的基本思想&#xff1a; 构建深度学习的过程&#xff1a;产生idea&#xff0c;将idea转化成code&#xff0c;最后进行experiment&#xff0c;之后根据结果修改idea&#xff0c;继续idea–>code–>experiment的循环&#xff0c;直到最终训练…

Excel 按奇数偶数列处理数据

目录 一. 需求背景1.1 获取偶数列的数据1.2 奇偶列数据互换 二. 解决方式2.1 为列添加奇偶辅助列2.2 通过公式将奇偶列互换 一. 需求背景 1.1 获取偶数列的数据 ⏹ 最近在整理歌单&#xff0c;发现部分歌曲没有歌词&#xff0c;于是打算自己制作一份。 从网上找到了歌词&…

Vue前端的工作需求

加油&#xff0c;新时代打工人&#xff01; 需求 实现带树形结构的表格&#xff0c;父数据显示新增下级&#xff0c;和父子都显示编辑。 <template><div><el-table:data"tableData"style"width: 100%; margin-bottom: 20px"row-key"i…

YOLOv9独家原创改进|使用可改变核卷积AKConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核&#xff0c;对不规则特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

ArcGIS Runtime For Android开发之符号化和图层渲染

一、用Symbol对要素进行符号化 首先我们看一下Symbol 接口关系&#xff1a; 1、SimpleFillSymbol 他是用来进行简单的Graphic面要素填充符号化的&#xff0c;它可以设置要素的填充颜色&#xff0c;边线颜色、线宽&#xff0c;其用法如下&#xff1a; Polygon polygonnew Po…

python中的类与对象(3)

目录 一. 类的多继承 二. 类的封装 三. 类的多态 四. 类与对象综合练习&#xff1a;校园管理系统 一. 类的多继承 在&#xff08;2&#xff09;第四节中我们介绍了什么是类的继承&#xff0c;在子类的括号里面写入要继承的父类名。上一节我们只在括号内写了一个父类名&…

怎么删除CSDN上发布的文章(电脑版)

怎么删除CSDN上发布的文章(电脑版) 第一步&#xff1a;回到个人主页 第二步&#xff1a;点击右上角的“创作中心” 第三步&#xff1a;点击进去之后找到“管理”——“内容管理” 第四步&#xff1a;找到要删除的文章&#xff0c;点击右侧的三个小点点 第五步&#xff1a;然后…

js优雅的统计字符串字符出现次数

题目如下 统计一串字符串中每个字符出现的频率 示例字符串 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd小白写法 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfdlet result {}; for (let i 0; i < str.length; i) {if (result[str[i]]) {result[str[…

了解游戏中的数据同步

数据同步 在联机游戏中&#xff0c;我的操作和数据要同步给同一局游戏中其他所有玩家&#xff0c;其他玩家的操作和数据也会同步给我。这叫做数据同步&#xff0c;目前数据同步的方式则有帧同步和状态同步。 状态同步&#xff1a;将操作发送给服务端&#xff0c;服务端对操作…

springboot-基础-eclipse打包jar包和war包的方法与排错

目录 打jar包打war包排错获取包外位置eclipse找不到*.jar 打jar包 修改 application-dev.yml spring.thymeleaf.prefixfile:./templates/ &#xff08;非必须&#xff01;如果遇到找不到模板的情况这样做&#xff09;把templates文件夹复制到jar文件同级的目录。 但是无法解…