[沫忘录]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…...

探索C++标准模板库(STL):String接口的底层实现(下篇)
前引:在C的面向对象编程中,对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据,还是资源管理如何自动化,其底层机制均围绕两个关键概念展开:this指针与六大默认成员函数。它们如同对象的“隐形守护者”&am…...

字符串字典序最大后缀问题详解
字符串字典序最大后缀问题详解 一、问题定义与背景1.1 问题描述1.2 实际应用场景 二、暴力解法及其局限性2.1 暴力解法思路2.2 代码示例2.3 局限性分析 三、双指针算法:高效解决方案3.1 算法核心思想3.2 算法步骤3.3 代码实现3.4 与暴力解法对比 四、复杂度分析4.1 …...

升级:用vue canvas画一个能源监测设备和设备的关系监测图!
用vue canvas画一个能源电表和设备的监测图-CSDN博客 上一篇文章,我是用后端的数据来画出监测图。这次我觉的,用前端来控制数据,更爽。 本期实现功能: 1,得到监测设备和设备的数据,然后进行存库 2&…...

【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程
在车辆管理、物流运输、保险理赔等领域,经常需要处理大量的行驶证信息。传统的人工录入方式效率低、易出错,而使用 OCR 技术可以自动识别行驶证图片中的文字信息,极大提高数据处理效率。该系统可以应用于以下场景: 保险公司快速…...
Zookeeper 和 Kafka 版本与 JDK 要求
Apache Zookeeper 和 Apache Kafka 在不同版本中对 JDK 的要求如下表所示(基于官方文档和历史版本记录整理): 1. Zookeeper 版本与 JDK 要求 Zookeeper 版本要求的最低 JDK 版本说明3.4.x 系列JDK 6生产环境建议用 JDK 8(旧版兼容性强)。3.5.x 系列(3.5.5+)JDK 83.5.0 …...

SpringBoot手动实现流式输出方案整理以及SSE规范输出详解
背景: 最近做流式输出时,一直使用python实现的,应需求方的要求,需要通过java应用做一次封装并在java侧完成系统鉴权、模型鉴权等功能后才能真正去调用智能体应用,基于此调研java实现流式输出的几种方式,并…...

电动螺丝刀-多实体拆图建模案例
多实体建模要注意下面两点: 多实体建模的合并结果一定要谨慎在实际工作中多实体建模是一个非常好的思路,先做产品的整体设计,再将个体零件导出去做局部细节设计 电动螺丝刀模型动图展示 爆炸视图动图展示 案例素材点击此处获取 建模步骤 1. …...

第十三节:第四部分:集合框架:HashMap、LinkedHashMap、TreeMap
Map集合体系 HashMap集合的底层原理 HashMap集合底层是基于哈希表实现的 LinkedHashMap集合的底层原理 TreeMap集合的底层原理 代码: Student类 package com.itheima.day26_Map_impl;import java.util.Objects;public class Student implements Comparable<Stu…...

Qt/C++学习系列之QButtonGroup的简单使用
Qt/C学习系列之QButtonGroup的简单使用 前言QButtonGroup刨析源码 具体使用界面设计具体函数使用初始化信号与槽函数(两种方式) 总结 前言 在练手项目中,使用了QButtonGroup。项目需求有互斥的要求,在使用QRadioButton的基础上&a…...

华为云学堂-云原生开发者认证课程列表
华为云学堂-云原生认证 云原生开发者认证的前5个课程...