[沫忘录]MySQL 锁
[沫忘录]MySQL 锁
锁能够协调多线程或多进程并发访问某资源产生的数据冲突与错乱。而在数据库中,锁也是协调数据库访问的有效工具。
全局锁
能够锁住当前服务器所有数据库及其表。后续所有事务都只能进行读操作,而不能进行写操作或表属性更改。
典型使用场景是数据库的逻辑备份。
在数据库备份时,如果中途对还未来得及备份的表进行了一次修改,那么此时备份的数据库是修改之后的数据库,而非修改之前的数据库。更甚的是,如果该次修改还涉及已经备份了的数据,那么这次备份既包含修改后的数据,也包含修改前的数据,照成了数据的不一致性。
#数据库备份(命令行命令)
mysqldump -uroot(用户) -p1234(密码) 待备份数据库名>itcast.sql(数据库文件)#添加全局锁
flush tables with read lock;#关闭全局锁
unlock tables;
存在的缺点
- 当全局锁存在时,许多诸如插入数据的操作都会阻塞停摆。大幅影响并发效率。
- 当全局锁存在时,如果存在主从数据库,则对从属数据库备份时,从属数据库无法接受主数据库发来的数据,造成主从数据不同步。
表级锁
表级锁的使用频次比全局锁大,但表锁锁住整张表,粒度比较大,所以发生锁冲突的概率最高。
表锁
表锁分为表共享读锁和表独占写锁。
-
表共享读锁
所有客户端连接一律只读,其他客户端写操作阻塞。
-
表独占写锁
只允许加锁客户端读写,其他客户端操作阻塞。
#加锁
lock tables 表名 read|write;#解锁
unlock tables;#或者直接断开客户端连接
元数据锁
元数据锁(meta data lock, MDL)加锁过程是系统自动控制,无需显示使用,主要用于避免DML和DDL冲突,保证数据读写正确性。
当对一张表进行增删改查时,加的MDL读写锁是共享的(共享即存在一种锁时是否能够添加另一种锁);当对表结构进行变更操作的时候,加MDL写锁是排他互斥的。

#查看元数据锁
SELECT object_type, object_schema, object_name, lock_type, lock_duration FROM performance_schema.metadata_locks;
元数据锁中的shared_write和shared_read不同于表锁,会对其他客户端的事务产生影响,而更多的是一种标记,主要与EXCLUSIVE的进行互斥。故不同客户端携带shared_write和shared_read并不会同表锁一样可能相会之间阻塞。
意向锁
当表中存在行级锁,再加表锁可能因表锁类型而无法加锁。而如果全表扫描是否有行锁,那么效率较低。因此我们引入意向锁来标记行锁类型,避免全表查询。
notice: 元数据锁中加锁等行为也会产生意向锁,如lock in share mode就会对查询的元组加意向共享锁和行共享锁,数据修改则会加意向排他锁和行排他锁,这与元数据锁中的读写锁兼容有所区别。
- 意向共享锁(IS): 与表锁共享锁(read)兼容,与表锁排他锁(write)互斥。
- 意向排他锁(IX): 与表锁共享锁(read)和表锁排他锁(write)都互斥。意向锁间不互斥。
#查看意向锁
select object_schema, object_name, index_name, lock_type, lock_mode, lock_data from performance_schema.data_locks;
行级锁
行锁基于聚集索引的索引项进行上锁,而非对表中行直接上锁。
行级锁的特点是粒度最小,并发最高。
-
行锁
- 共享锁(s): 允许一个事务读一行,阻止其他事务读此行。
- 排他锁(x): 允许加排他锁事务更新数据,阻止其他事务所有行为。
事务在默认隔离级别下,对已操作的单行加行锁。
行锁是对索引进行加锁,如若对没有索引的字段进行匹配,那么行锁将会升级成表锁。
-
间隙锁
在两个元组之间加锁,防止其他事务将数据插入到这两个元组之间。
间隙锁是能够共存的,多个事务可以对同一个间隙添加间隙锁。
-
临键锁
在对元组加行锁的同时,对元组前面的加间隙锁。
notice:
- 等值查询(含索引)时,如无法查找到该元组,则会对最后一个不满足查询的元组前面加间隙锁。
- 范围查询时,如会对最后一个不满足查询的元组前面加间隙锁,所有满足查询的元组加临键锁。
间隙锁和临键锁能够有效避免幻读现象,即其他事务新增了当前事务未曾读取的数据,如果其他事务再回滚删除该数据,则当前事务又无法查看该数据,造成数据时有时无,如同幻觉。
元组前面加间隙锁,所有满足查询的元组加临键锁。
间隙锁和临键锁能够有效避免幻读现象,即其他事务新增了当前事务未曾读取的数据,如果其他事务再回滚删除该数据,则当前事务又无法查看该数据,造成数据时有时无,如同幻觉。
相关文章:
[沫忘录]MySQL 锁
[沫忘录]MySQL 锁 锁能够协调多线程或多进程并发访问某资源产生的数据冲突与错乱。而在数据库中,锁也是协调数据库访问的有效工具。 全局锁 能够锁住当前服务器所有数据库及其表。后续所有事务都只能进行读操作,而不能进行写操作或表属性更改。 典型…...
噪声嵌入提升语言模型微调性能
在自然语言处理(NLP)的快速发展中,大模型(LLMs)的微调技术一直是研究的热点。最近,一篇名为《NEFTUNE: NOISY EMBEDDINGS IMPROVE INSTRUCTION FINETUNING》的论文提出了一种新颖的方法,通过在训…...
XML文档基本语法
XML文档基本语法包括以下几个知识点: 开始标记(Start Tag):开始标记是XML元素的起始符号,由左尖括号(<)和元素名称组成。例如,是一个开始标记,表示一个名为"book…...
git开发工作流程
git开发工作流程 (1)先将远程代码pull到本地 (2)在本地上分支上进行开发 (3)开发完之后,push到远程分支 (4)由远程的master进行所有分支合并...
JDK生成https配置
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\https证书\weChat.keystore -validity 36500 -keypass 250250 keytool -importkeystore -srcstoretype JKS -srckeystore D:\https证书\weChat.keystore -srcstorepass 250250 -srcalias tomcat -srckeypass 25025…...
通过 Java 操作 redis -- set 集合基本命令
目录 使用命令 sadd ,smembers 使用命令 sismember 使用命令 scard 使用命令 spop 使用命令 sinter,sinterstore,sunion,sunionstore,sdiff,sdiffstore 关于 redis set 集合类型的相关命令推荐看Redis …...
WebSocket前后端建立以及使用
1、什么是WebSocket WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它提供了一种持久化的连接,允许服务器主动向客户端推送数据,同时也允许客户端向服务器发送数据,实现了实时的双向通信。 这部分直接说你可能听不懂;我…...
C++数据结构之链表树图的存储
本文主要介绍用数组存储,结构只做简单介绍 目录 文章目录 前言 结构体实现 1、链表的存储 2、树的存储 3、图的存储 数组实现 1、链表实现 2、树和图的实现 总结 前言 在正常工程中,我们通常使用结构体或者类,来定义并使用如链表…...
又一位互联网大佬转行当网红,能写进简历么?
最近半个月,有两个中年男人仿佛住进了热搜。 一个是刚刚辟谣自己“卡里没有冰冷的 40 亿”的雷军,另一个则是在今年年初就高呼“如果有可能,企业家都要去当网红”的 360 创始人周鸿祎。 他也确实做到了。 先是作为当年 3Q 大战的当事人&…...
Codeforces Round 134 (Div. 1) A. Ice Skating (并查集)
Ice Skating 题面翻译 Description 给出n个点的横纵坐标,两个点互通当且仅当两个点有相同的横坐标或纵坐标,问最少需要加几个点才能使得所有点都两两互通 Input 第一行一个整数n表示点数,之后n行每行两个整数x[ i ]和y[ i ]表示第i个点的…...
深入了解 Flask Request
文章目录 获取请求数据获取请求信息文件上传总结 Flask 是一个轻量级的 Python Web 框架,其简洁的设计和灵活的扩展性使其成为了许多开发者的首选。在 Flask 中,处理 HTTP 请求是至关重要的,而 Flask 提供了丰富而强大的 request 对象来处理…...
前端测试策略与实践:单元测试、E2E测试与可访问性审计
前端测试策略是确保Web应用程序质量、性能和用户体验的关键组成部分。有效的测试策略通常包括单元测试、端到端(E2E)测试以及可访问性审计等多个层面。以下是关于这三类测试的策略与实践建议: 单元测试 定义与目的: 单元测试是针…...
修改el-checkbox样式
一定要在最外层; //未选中框/deep/ .el-checkbox__inner{border-color: #0862a3;}//选中框/deep/ .el-checkbox__input.is-checked .el-checkbox__inner{background-color: #0862a3;border-color: #0862a3;}//未选中框时右侧文字/deep/ .el-checkbox__label{}//选中…...
UE5缺少SDK,而无法在windows平台打包的解决方法
问题1:UE5缺少SDK,而无法在windows平台打包的解决方法(项目问题,做一下记录,没有参考性) (1)打不开:D:\imageworks-OpenColorIO-Configs-v1.0_r2-8-g0bb079c.tar 解决方案:从23拷贝D…...
4G,5G执法记录仪人脸识别、人脸比对使用说明
4G/5G执法记录仪或4G/5G智能安全帽,做前端人脸识别、人脸比对,采用了上市公司的成熟的人脸识别算法,需要支付LICENSE给算法公司,理论上前端设备支持30K的人脸库(受设备运行内存限制)。 4G/5G执法记录仪侧要…...
掌握SEO优化的关键:提升网站排名的秘籍(如何提高网站seo排名)
你是否曾经在搜索引擎上搜索过一个关键词,然后点击了排在前几位的网站?如果是,那么你已经体会到了SEO(搜索引擎优化)的威力。SEO是一项关键的网络营销策略,它能够让你的网站在搜索引擎中获得更高的排名&…...
大模型微调之 在亚马逊AWS上实战LlaMA案例(九)
大模型微调之 在亚马逊AWS上实战LlaMA案例(九) 代码阅读 src/llama_recipes/inference/prompt_format_utils.py 这段代码是一个Python模块,它定义了几个类和模板,用于生成安全评估的提示文本。以下是对每一行代码的注释和提示词…...
Php php7的特性
1. 性能优化 PHP7引入了Zend Engine 3.0,显著提高了执行效率,相比PHP 5.x,性能提升了2-3倍。这个特性无法直接通过代码示例展示,但你可以感受到在升级到PHP7后,相同代码的执行速度更快。 2. 函数返回类型声明 允许在…...
node pnpm修改默认包的存储路径
pnpm与npm的区别 PNPM和NPM是两个不同的包管理工具。 NPM(Node Package Manager)是Node.js的官方包管理工具,用于安装、发布和管理Node.js模块。NPM将包安装在项目的node_modules目录中,每个包都有自己的依赖树。 PNPM…...
Adobe-Premiere-CEP 扩展 入门-视频剪辑-去气口插件-Silence Remover
短视频,这两年比较火,不要再问为什么用Premiere,非常难用,为什么不用某影,某些国内软件非常接地气简单,又例如某音资深的视频短编辑就很好用了。。。 Premiere二次开发调试难,不如自己搞个cons…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
