MySQL-SQL全部锁详解(上)

news2024/11/8 7:26:42

​♥️作者:小刘在C站

♥️个人主页: 小刘主页

♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生!

♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术专栏

♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSDN让你我相遇!

目录

MySQL

SQL

1 概述

2 全局锁

2.1 介绍

2.2 语法

1). 加全局锁

2). 数据备份

3). 释放锁

2.3 特点

3 表级锁

3.1 介绍

3.2 表锁

A. 读锁

B. 写锁

测试:

3.3 元数据锁

 演示:

 3.4 意向锁

1). 介绍

 2). 分类\


MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

SQL

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

1 概述

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

MySQL中的锁,按照锁的粒度分,分为以下三类:

全局锁:锁定数据库中的所有表。

表级锁:每次操作锁住整张表。

行级锁:每次操作锁住对应的行数据。

2 全局锁

2.1 介绍

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。

其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

为什么全库逻辑备份,就需要加全就锁呢?

A. 我们一起先来分析一下不加全局锁,可能存在的问题。

假设在数据库中存在这样三张表: tb_stock 库存表,tb_order 订单表,tb_orderlog 订单日

志表。

 在进行数据备份时,先备份了tb_stock库存表。 

然后接下来,在业务系统中,执行了下单操作,扣减库存,生成订单(更新tb_stock表,插入

tb_order表)。

然后再执行备份 tb_order表的逻辑。

业务中执行插入订单日志操作。

最后,又备份了tb_orderlog表。

此时备份出来的数据,是存在问题的。因为备份出来的数据,tb_stock表与tb_order表的数据不一

致(有最新操作的订单信息,但是库存数没减)。

那如何来规避这种问题呢? 此时就可以借助于MySQL的全局锁来解决。

B. 再来分析一下加了全局锁后的情况

对数据库进行进行逻辑备份之前,先对整个数据库加上全局锁,一旦加了全局锁之后,其他的DDL、DML全部都处于阻塞状态,但是可以执行DQL语句,也就是处于只读状态,而数据备份就是查询操作。那么数据在进行逻辑备份的过程中,数据库中的数据就是不会发生变化的,这样就保证了数据的一致性 和完整性。

2.2 语法

1). 加全局锁

flush tables with read lock ;

2). 数据备份

mysqldump -uroot –p1234 itcast > itcast.sql

数据备份的相关指令, 在后面MySQL管理章节, 还会详细讲解.

3). 释放锁

unlock tables ;

2.3 特点

数据库中加全局锁,是一个比较重的操作,存在以下问题:

如果在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆。

如果在从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志(binlog),会导

致主从延迟。

在InnoDB引擎中,我们可以在备份时加上参数 --single-transaction 参数来完成不加锁的一致

性数据备份。

mysqldump --single-transaction -uroot –p123456 itcast > itcast.sql

3 表级锁

3.1 介绍

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。

对于表级锁,主要分为以下三类:

表锁

元数据锁(meta data lock,MDL)

意向锁

3.2 表锁

对于表锁,分为两类:

表共享读锁(read lock)

表独占写锁(write lock)

语法:

加锁:lock tables 表名... read/write。

释放锁:unlock tables / 客户端断开连接 。

特点:

A. 读锁

左侧为客户端一,对指定表加了读锁,不会影响右侧客户端二的读,但是会阻塞右侧客户端的写。

测试:

B. 写锁

 左侧为客户端一,对指定表加了写锁,会阻塞右侧客户端的读和写。

测试:

 结论: 读锁不会阻塞其他客户端的读,但是会阻塞写。写锁既会阻塞其他客户端的读,又会阻塞其他客户端的写。

3.3 元数据锁

meta data lock , 元数据锁,简写MDL。

MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与DDL冲突,保证读写的正确性。

这里的元数据,大家可以简单理解为就是一张表的表结构。 也就是说,某一张表涉及到未提交的事务时,是不能够修改这张表的表结构的。

在MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享);当对表结构进行变更操作的时候,加MDL写锁(排他)。

常见的SQL操作时,所添加的元数据锁:

 演示:

当执行SELECT、INSERT、UPDATE、DELETE等语句时,添加的是元数据共享锁(SHARED_READ / SHARED_WRITE),之间是兼容的。

当执行SELECT语句时,添加的是元数据共享锁(SHARED_READ),会阻塞元数据排他锁

(EXCLUSIVE),之间是互斥的。

 我们可以通过下面的SQL,来查看数据库中的元数据锁的情况:

select object_type,object_schema,object_name,lock_type,lock_duration from
performance_schema.metadata_locks ;

我们在操作过程中,可以通过上述的SQL语句,来查看元数据锁的加锁情况。

 3.4 意向锁

1). 介绍

为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。

假如没有意向锁,客户端一对表加了行锁后,客户端二如何给表加表锁呢,来通过示意图简单分析一下:

首先客户端一,开启一个事务,然后执行DML操作,在执行DML语句时,会对涉及到的行加行锁。

当客户端二,想对这张表加表锁时,会检查当前表是否有对应的行锁,如果没有,则添加表锁,此时就 会从第一行数据,检查到最后一行数据,效率较低。

 有了意向锁之后 :

客户端一,在执行DML操作时,会对涉及的行加行锁,同时也会对该表加上意向锁。

而其他客户端,在对这张表加表锁的时候,会根据该表上所加的意向锁来判定是否可以成功加表锁,而不用逐行判断行锁情况了。

 2). 分类\

意向共享锁(IS): 由语句select ... lock in share mode添加 。 与 表锁共享锁

(read)兼容,与表锁排他锁(write)互斥。

意向排他锁(IX): 由insert、update、delete、select...for update添加 。与表锁共

享锁(read)及排他锁(write)都互斥,意向锁之间不会互斥。

一旦事务提交了,意向共享锁、意向排他锁,都会自动释放。

可以通过以下SQL,查看意向锁及行锁的加锁情况:

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from
performance_schema.data_locks;

演示: A. 意向共享锁与表读锁是兼容的

 B. 意向排他锁与表读锁、写锁都是互斥的

♥️关注,就是我创作的动力

♥️点赞,就是对我最大的认可

♥️这里是小刘,励志用心做好每一篇文章,谢谢大家

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

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

相关文章

计算机方向常见期刊的缩写 !!

期刊的缩写 TPAMI: IEEE Trans. Pattern Anal. Mach. Intell. IEEE Transactions on Image Processing(TIP): IEEE Trans. Image Process. IEEE Transactions on Medical Imaging(TMI):IEEE Trans. Med. Imaging IEEE…

【论文笔记】BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers

1.介绍 1.1 核心观点 当时的所有的重建目标都是关于低级图像元素的,低估了高级语义。 【Q】怎么去定义高级和低级语义 1.2 基本流程 VQ-KD编码器首先根据可学习码本将输入图像转换为离散令牌 然后,解码器学习重建由教师模型编码的语义特征&#x…

4C沟通法则16项注意事项 让项目沟通更高效

在我们日常项目沟通过程中,存在很多沟通障碍,如我以为的错误、不敢越级沟通、害怕被拒绝以及没有提前计划沟通活动等。沟通障碍如需求理解错误、开发团队关系紧张、任务分配执行难度大等问题,往往对项目造成不可估量的影响,有可能…

[Web程序设计]实验:会话技术应用

一、实验目的 (1)掌握Cookie和session两种会话跟踪技术和它们的应用和区别。 (2)掌握Cookie和session两种会话的应用和区别。 二、实验内容 (1)请设计一个类,使用Cookie技术实现显示用户上次…

【消费战略方法论】消费本位的战略模型

消费本位战略模型 消费者需求是价值交换的基础。 在经济学中,“买”与“卖”是经济链中的重要两端,一端连接消费需求决定市场规模,一端连接产品供给决定企业利润。即“买”决定“卖”的根本, “卖”是“买”的基础。消费者需求是…

第1讲 Camera KMD ISP子系统课程介绍

更多资源: 资源描述在线课程极客笔记在线课程知识星球星球名称:深入浅出Android Camera 星球ID: 17296815Wechat极客笔记圈 课程内容介绍 目标:课程会帮助大家理解高通camera kmd驱动,包括一些优秀的设计思想。重点讲解cpas, c…

有关回溯问题,总结的细致要点

目录 对于这三类问题的去重我总结的模板,直接用: 组合: 子集: 排列: 总结: 三类回溯问题框架都是 if ...终止for 遍历递归 三类问题都抽象成树 dfs 对于组合和子集问题,需要用到index对…

软件测试的概念与过程----学习软件测试前的思考

软件测试的概念与过程----学习软件测试前的思考 1、软件测试工作是做什么的?2、那我做软件测试拿到一个软件产品我应该从哪里测试,怎末开始工作?3、测试早做好还是晚一些做好?4、软件测试能将软件测试的一点问题都没有嘛&#xff…

蓝牙无线耳机哪个品牌好?盘点前七名无线蓝牙耳机分享

本文将为您详细介绍每款蓝牙耳机的设计特点、音质表现、续航能力和智能功能等关键信息。我们将提供客观、全面的分析,帮助您更好地了解每款产品的优势和适用场景;无论您是追求高保真音质的音乐发烧友,还是需要轻便舒适的耳机进行运动&#xf…

好选客干货分享:矿物燃料找外贸客户

矿物燃料概述 矿物燃料,也称化石燃料,是由数百万年来的动植物遗骸形成的自然资源,也是人类社会中重要的能源来源之一,主要包括煤炭、石油和天然气。 Image by PublicDomainPictures via Pixabay 在商品类章27章中,矿物…

HashMap的底层实现原理

红黑数演示地址&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 一、构造源码解读 public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {//1、实现了两个Map接口 &#xff0c;…

【金融量化】购买了多只基金,如何进行资产分配?如何基金组合配置?

【金融量化】购买了多只基金&#xff0c;如何进行资产分配&#xff1f;如何基金组合配置&#xff1f; 1 概念 FOF&#xff08;Fund of fund&#xff09;&#xff0c;即基金中基金&#xff0c;是一种投资于其他投资基金的基金。说白了&#xff0c;就是基金经理是买入多只基金取…

Day_56-57kMeans 聚类

目录 Day_56-57 k-Means 聚类 一. 基本概念介绍 二. 具体过程 三. 代码实现与解释 1. 导入数据与数据初始化 2. 核心代码 3. 后续信息的补充 4. 距离计算和随机排列 四. 后续的数据分析 五. 运行结果 Day_56-57 k-Means 聚类 一. 基本概念介绍 同我上一篇博客的介绍&…

微博视频发布软件有哪些

微博视频发布软件有哪些&#xff0c;新的新浪微博怎么发微博#科技#手机操作#微信 软件有月卡、季卡、半年卡、年卡 【引流脚本软件发帖顶帖有货】 服务时间&#xff1a;&#xff08;8&#xff1a;00—23&#xff1a;00&#xff09; 需要观看软件操作视频教程的可关注↑↑↑上…

大数据开发技术与实践期末复习(HITWH)

目录 分布式文件处理系统HDFS 分布式文件系统 HDFS简介 块&#xff08;block&#xff09; 主要组件的功能 **名称节点 FsImage文件 名称节点的启动 名称节点运行期间EditLog不断变大的问题 SecondaryNameNode的工作情况 数据节点 HDFS体系结构 HDFS体系结构的局限…

游戏行业黑马昆仑万维,国产AI巨头崛起

游戏行业黑马昆仑万维&#xff0c;国产AI巨头崛起&#xff0c;其大模型技术堪比ChatGPT 随着人工智能技术的快速发展&#xff0c;越来越多的公司参与大规模语言模型的开发和应用。近日&#xff0c;昆仑万维正式发布大型语言模型“天宫”&#xff0c;宣布即日起开始邀请测试&am…

操作系统——基于信号量机制的并发程序设计

一、实验题目 基于信号量机制的并发程序设计 二、实验目的 (1) 回顾操作系统进程、线程的有关概念&#xff0c;针对经典的同步、互斥、死锁与饥饿问题进行并发 程序设计。 (2) 了解互斥体对象&#xff0c;利用互斥与同步操作编写读者-写者问题的并发程序&#xff0c;加深…

测试老鸟,带你手写Python自动化测试 ddt 数据驱动框架(超细细)

前言 python做自动化测试&#xff0c;大多数都应该使用过ddt这个模块&#xff0c;它可以自动根据用例数据&#xff0c;来生成测试用例&#xff0c;能够很方便的将测试数据和测试用例执行的逻辑进行分离。接下来和大家&#xff0c;手把手撸出一个ddt。 DDT的实现原理 首先我们…

MUR80120PT-ASEMI快恢复二极管MUR80120PT

编辑-Z MUR80120PT在TO-247封装里采用的2个芯片&#xff0c;其尺寸都是140MIL&#xff0c;是一款高耐压大电流快恢复二极管。MUR80120PT的浪涌电流Ifsm为600A&#xff0c;漏电流(Ir)为10uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。MUR80120PT采用抗冲击硅芯片材质&…

DJ5-4 MAC、ARP

目录 一、链路层寻址地址 1、MAC 地址分配 2、MAC 地址识别 二、ARP 地址解析协议 1、ARP 地址解析协议 2、ARP&#xff1a;两个主机位于同一个局域网 3、ARP&#xff1a;发送数据报到子网以外 4、ARP 自举 5、ARP 攻击 一、链路层寻址地址 每个节点有网络层地址和链…