当前位置: 首页 > news >正文

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

  1. 等值查询(含索引)时,如无法查找到该元组,则会对最后一个不满足查询的元组前面加间隙锁。
  2. 范围查询时,如会对最后一个不满足查询的元组前面加间隙锁,所有满足查询的元组加临键锁。

间隙锁和临键锁能够有效避免幻读现象,即其他事务新增了当前事务未曾读取的数据,如果其他事务再回滚删除该数据,则当前事务又无法查看该数据,造成数据时有时无,如同幻觉。

元组前面加间隙锁,所有满足查询的元组加临键锁。

间隙锁和临键锁能够有效避免幻读现象,即其他事务新增了当前事务未曾读取的数据,如果其他事务再回滚删除该数据,则当前事务又无法查看该数据,造成数据时有时无,如同幻觉。

相关文章:

[沫忘录]MySQL 锁

[沫忘录]MySQL 锁 锁能够协调多线程或多进程并发访问某资源产生的数据冲突与错乱。而在数据库中,锁也是协调数据库访问的有效工具。 全局锁 能够锁住当前服务器所有数据库及其表。后续所有事务都只能进行读操作,而不能进行写操作或表属性更改。 典型…...

噪声嵌入提升语言模型微调性能

在自然语言处理(NLP)的快速发展中,大模型(LLMs)的微调技术一直是研究的热点。最近,一篇名为《NEFTUNE: NOISY EMBEDDINGS IMPROVE INSTRUCTION FINETUNING》的论文提出了一种新颖的方法,通过在训…...

XML文档基本语法

XML文档基本语法包括以下几个知识点&#xff1a; 开始标记&#xff08;Start Tag&#xff09;&#xff1a;开始标记是XML元素的起始符号&#xff0c;由左尖括号&#xff08;<&#xff09;和元素名称组成。例如&#xff0c;是一个开始标记&#xff0c;表示一个名为"book…...

git开发工作流程

git开发工作流程 &#xff08;1&#xff09;先将远程代码pull到本地 &#xff08;2&#xff09;在本地上分支上进行开发 &#xff08;3&#xff09;开发完之后&#xff0c;push到远程分支 &#xff08;4&#xff09;由远程的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 &#xff0c;smembers 使用命令 sismember 使用命令 scard 使用命令 spop 使用命令 sinter&#xff0c;sinterstore&#xff0c;sunion&#xff0c;sunionstore&#xff0c;sdiff&#xff0c;sdiffstore 关于 redis set 集合类型的相关命令推荐看Redis …...

WebSocket前后端建立以及使用

1、什么是WebSocket WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它提供了一种持久化的连接&#xff0c;允许服务器主动向客户端推送数据&#xff0c;同时也允许客户端向服务器发送数据&#xff0c;实现了实时的双向通信。 这部分直接说你可能听不懂&#xff1b;我…...

C++数据结构之链表树图的存储

本文主要介绍用数组存储&#xff0c;结构只做简单介绍 目录 文章目录 前言 结构体实现 1、链表的存储 2、树的存储 3、图的存储 数组实现 1、链表实现 2、树和图的实现 总结 前言 在正常工程中&#xff0c;我们通常使用结构体或者类&#xff0c;来定义并使用如链表…...

又一位互联网大佬转行当网红,能写进简历么?

最近半个月&#xff0c;有两个中年男人仿佛住进了热搜。 一个是刚刚辟谣自己“卡里没有冰冷的 40 亿”的雷军&#xff0c;另一个则是在今年年初就高呼“如果有可能&#xff0c;企业家都要去当网红”的 360 创始人周鸿祎。 他也确实做到了。 先是作为当年 3Q 大战的当事人&…...

Codeforces Round 134 (Div. 1) A. Ice Skating (并查集)

Ice Skating 题面翻译 Description 给出n个点的横纵坐标&#xff0c;两个点互通当且仅当两个点有相同的横坐标或纵坐标&#xff0c;问最少需要加几个点才能使得所有点都两两互通 Input 第一行一个整数n表示点数&#xff0c;之后n行每行两个整数x[ i ]和y[ i ]表示第i个点的…...

深入了解 Flask Request

文章目录 获取请求数据获取请求信息文件上传总结 Flask 是一个轻量级的 Python Web 框架&#xff0c;其简洁的设计和灵活的扩展性使其成为了许多开发者的首选。在 Flask 中&#xff0c;处理 HTTP 请求是至关重要的&#xff0c;而 Flask 提供了丰富而强大的 request 对象来处理…...

前端测试策略与实践:单元测试、E2E测试与可访问性审计

前端测试策略是确保Web应用程序质量、性能和用户体验的关键组成部分。有效的测试策略通常包括单元测试、端到端&#xff08;E2E&#xff09;测试以及可访问性审计等多个层面。以下是关于这三类测试的策略与实践建议&#xff1a; 单元测试 定义与目的&#xff1a; 单元测试是针…...

修改el-checkbox样式

一定要在最外层&#xff1b; //未选中框/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&#xff1a;UE5缺少SDK&#xff0c;而无法在windows平台打包的解决方法&#xff08;项目问题&#xff0c;做一下记录&#xff0c;没有参考性&#xff09; (1)打不开&#xff1a;D:\imageworks-OpenColorIO-Configs-v1.0_r2-8-g0bb079c.tar 解决方案&#xff1a;从23拷贝D…...

4G,5G执法记录仪人脸识别、人脸比对使用说明

4G/5G执法记录仪或4G/5G智能安全帽&#xff0c;做前端人脸识别、人脸比对&#xff0c;采用了上市公司的成熟的人脸识别算法&#xff0c;需要支付LICENSE给算法公司&#xff0c;理论上前端设备支持30K的人脸库&#xff08;受设备运行内存限制&#xff09;。 4G/5G执法记录仪侧要…...

掌握SEO优化的关键:提升网站排名的秘籍(如何提高网站seo排名)

你是否曾经在搜索引擎上搜索过一个关键词&#xff0c;然后点击了排在前几位的网站&#xff1f;如果是&#xff0c;那么你已经体会到了SEO&#xff08;搜索引擎优化&#xff09;的威力。SEO是一项关键的网络营销策略&#xff0c;它能够让你的网站在搜索引擎中获得更高的排名&…...

大模型微调之 在亚马逊AWS上实战LlaMA案例(九)

大模型微调之 在亚马逊AWS上实战LlaMA案例&#xff08;九&#xff09; 代码阅读 src/llama_recipes/inference/prompt_format_utils.py 这段代码是一个Python模块&#xff0c;它定义了几个类和模板&#xff0c;用于生成安全评估的提示文本。以下是对每一行代码的注释和提示词…...

Php php7的特性

1. 性能优化 PHP7引入了Zend Engine 3.0&#xff0c;显著提高了执行效率&#xff0c;相比PHP 5.x&#xff0c;性能提升了2-3倍。这个特性无法直接通过代码示例展示&#xff0c;但你可以感受到在升级到PHP7后&#xff0c;相同代码的执行速度更快。 2. 函数返回类型声明 允许在…...

node pnpm修改默认包的存储路径

pnpm与npm的区别 PNPM和NPM是两个不同的包管理工具。 NPM&#xff08;Node Package Manager&#xff09;是Node.js的官方包管理工具&#xff0c;用于安装、发布和管理Node.js模块。NPM将包安装在项目的node_modules目录中&#xff0c;每个包都有自己的依赖树。 PNPM&#xf…...

Adobe-Premiere-CEP 扩展 入门-视频剪辑-去气口插件-Silence Remover

短视频&#xff0c;这两年比较火&#xff0c;不要再问为什么用Premiere&#xff0c;非常难用&#xff0c;为什么不用某影&#xff0c;某些国内软件非常接地气简单&#xff0c;又例如某音资深的视频短编辑就很好用了。。。 Premiere二次开发调试难&#xff0c;不如自己搞个cons…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...