一文了解MySQL的表级锁
文章目录
- ☃️概述
- ☃️表级锁
- ❄️❄️介绍
- ❄️❄️表锁
- ❄️❄️元数据锁
- ❄️❄️意向锁
- ⛷️⛷️⛷️ 介绍

☃️概述
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。
如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
MySQL中的锁,按照锁的粒度分,分为以下三类:
● 全局锁:锁定数据库中的所有表。
● 表级锁:每次操作锁住某一张表。
● 行级锁:每次操作锁住对应的行数据。
☃️表级锁
❄️❄️介绍
表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB 等存储引擎中。
对于表级锁,主要分为以下三类:
● 表锁
● 元数据锁(meta data lock,MDL)
● 意向锁
❄️❄️表锁
对于表锁,分为两类:
● 表共享读锁(read lock)
● 表独占写锁(write lock)
语法:
● 加锁:lock tables 表名… read/write。
● 释放锁:unlock tables / 客户端断开连接 。
特点:
A. 读锁

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

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

结论
读锁不会阻塞其他客户端的读,但是会阻塞写。写锁既会阻塞其他客户端的读,又会阻塞其他客户端的写。
❄️❄️元数据锁
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语句,来查看元数据锁的加锁情况。
mysql> select object_type,object_schema,object_name,lock_type,lock_duration
from performance_schema.metadata_locks;

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

❄️❄️意向锁
⛷️⛷️⛷️ 介绍
为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。
假如没有意向锁,客户端一对表加了行锁后,客户端二如何给表加表锁呢,来通过示意图简单分析一下:
首先客户端一,开启一个事务,然后执行DML操作,在执行DML语句时,会对涉及到的行加行锁。
当客户端二,想对这张表加表锁时,会检查当前表是否有对应的行锁,如果没有,则添加表锁,此时就会从第一行数据,检查到最后一行数据,效率较低。

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

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

- 分类
● 意向共享锁(IS): 由语句select … lock in share mode添加 。与表锁共享锁(read)兼容,与表锁排他锁(write)互斥。
● 意向排他锁(IX): 由insert、update、delete、select…for update添加。与表锁共享锁(read)及排他锁(write)都互斥,意向锁之间不会互斥。
一旦事务提交了,意向共享锁、意向排他锁,都会自动释放。
可以通过以下SQL,查看意向锁及行锁的加锁情况:
演示:
A. 意向共享锁与表读锁是兼容的

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


相关文章:
一文了解MySQL的表级锁
文章目录 ☃️概述☃️表级锁❄️❄️介绍❄️❄️表锁❄️❄️元数据锁❄️❄️意向锁⛷️⛷️⛷️ 介绍 ☃️概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外࿰…...
LVS+Keepalive高可用
1、keepalive 调度器的高可用 vip地址主备之间的切换,主在工作时,vip地址只在主上,vip漂移到备服务器。 在主备的优先级不变的情况下,主恢复工作,vip会飘回到住服务器 1、配优先级 2、配置vip和真实服务器 3、主…...
网络安全防御【防火墙安全策略用户认证综合实验】
目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、打开ensp防火墙的web服务(带内管理的工作模式) 2、在FW1的web网页中网络相关配置 3、交换机LSW6(总公司)的相关配置: 4、路由器相关接口配置&a…...
IOS上微信小程序密码框光标离开提示存储密码解决方案
问题: ios密码框输入密码光标离开之后会提示存储密码的弹窗 解决方案 1、在苹果手机上面把 “自动填充密码”关闭,但是苹果这个默认开启,而且大部分客户也不会去自己关闭。 2、欺骗苹果手机,代码实现。 先说解决思路…...
AWS CDN新增用户ip 地区 城市 响应头
1.需要自定义cdn缓存策略 这里的策略也是先复制之前的cdn策略哈 最后复制完了 全部新增这两条标头key CloudFront-Viewer-Country CloudFront-Viewer-City 2.然后新增cdn函数,应用你写的这个函数 function handler(event) {var request event.request;var respon…...
Elasticsearch基础概念
Elasticsearch 是一款开源的,ESTful风格的 分布式搜索、存储、分析引擎; 常见的使用场景 网站搜索,代码搜索等日志管理与分析,应用系统性能分析,安全指标监控等数据库同步,将数据库某个表的数据同步到elasticsearch上然后提供搜索服务 ES基本概念 文档 我们向elasticsearch存…...
Redis 7.x 系列【24】哨兵模式配置项
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 配置项2.1 protected-mode2.2 port2.3 daemonize2.4 pidfile2.5 loglevel2.…...
SpringBoot+Vue实现简单的文件上传(策略模式)
SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1,Vue 2,ElementUI 2 问题 前两篇文章,我们上传了txt、Excel文件,其实文件类型有很多种,如果我们的upload组件没有上传文件类型的限制,那么同一个…...
软考中级科目包含哪些?应该考哪个?
软考中级包含5个专业方向,分别是:计算机软件、计算机网络、计算机应用技术、信息系统、信息服务。这5个方向又对应15个软考中级科目。 信息系统包括:系统集成项目管理工程师、信息系统监理师、信息安全工程师、数据库系统工程师、信息系统管…...
ArcGIS Enterprise 命令行组件创建配置
1. 创建ArcGIS Server站点 使用 createsite工具 命令行直接执行 createsite.sh [-u <arg>] [-p <arg>] [-d <arg>] [-c <arg>]执行文件 createsite.sh [-f <FILE>]安装目录下会有类似的创建站点文件: 修改其中的内容,…...
Web组成架构
网站源码:分脚本类型,分应用方向操作系统:windows,linux中间件(搭建平台):apche、IIS、tomcat、nginx等数据库:mssql、oracle、sybase、db2、access等 WEB相关安全漏洞 WEB源码类对…...
「Pytorch」roLabelImg 图像异常旋转 bug
在进行Yolo-obb 模型训练的时候需要标注旋转框,roLabelImg 是比较推荐的一款旋转框标注工具,既可以标注正常的矩形框,还可以标注旋转框 roLabelImg Github 地址:https://github.com/HumanSignal/labelImg 但是在使用过程中遇到了…...
java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】
1、问题描述 学习SparkSql中,将spark中dataframe数据结构保存为jdbc的格式并提交到本地的mysql中,相关代码见文章末尾。 运行代码时报出相关配置文件错误,如下。 根据该报错,发现网络上多数解决方都是基于java开发的解决方案&a…...
汽车连接器革新!中国星坤产品在汽车安全与效率中的卓越表现!
随着汽车行业的快速发展,车载电子系统的复杂性不断增加,对连接器的性能要求也越来越高。中国星坤推出的汽车连接器,以其卓越的设计和性能,为汽车行业带来了一场技术革新。这些连接器不仅能够适应极端的工作环境,还确保…...
DHCP服务、FTP服务
一、DHCP 1.1 DHCP是什么 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,用于自动分配 IP 地址和其他网络配置信息给网络中的设备 1.2 DHCP的好处 自动化: 减少了手动配置 IP 地址和网络参数的工…...
AWS云计算实战:电商平台发卡机器人开发指南
在当今数字化时代,电商平台的自动化运营变得尤为重要。本文将深入探讨如何利用AWS云计算平台开发一款高效的发卡机器人,旨在提高电商平台的自动化水平和用户体验。 关键词 AWS云计算, 电商平台, 发卡机器人 1. 引言 随着电商行业的蓬勃发展ÿ…...
虚拟机及其Debian(kali)安装
本机电脑为Windows10系统专业版,在此基础上安装VMware和系统(Kali) 步骤如下 一、安装 VMware Workstation Pro v16.2.4 安装步骤可参照网上博客,该步骤较简单,此处不做讲解。文件中共计两个,其中一个是激活…...
Linux部署禅道(无脑复制版)
目录 环境部署1、下载,解压2、启动3、设置开机自启 登录禅道登录数据库1、设置账号2、网页登录数据库 环境 Linux系统 Centos7 《Linux一键安装包安装禅道》视频链接: https://www.zentao.net/zentao-install/zentao-linux-install-80523.html 部署 …...
C# .net6使用Hangfire
首先我们先来了解什么是Hangfire? Hangfire 是一个用于 .NET 的任务调度库,允许你在后台运行任务,而不需要依赖外部的任务队列服务或复杂的基础设施。它简化了后台任务的创建、调度和管理过程,使得在 .NET 应用程序中处理长期运行…...
NaiveUI与ElementUI 比较分析
前言 在前端开发的广阔领域中,Vue.js作为最流行的前端框架之一,为开发者提供了丰富的组件库,其中NaiveUI和ElementUI是两个备受瞩目的选择。本文将深入分析这两个组件库的特点、优劣势以及适用场景,帮助开发者在项目中做出更合适…...
React Starter Kit 与Create React App对比:哪个更适合你的项目?
React Starter Kit 与Create React App对比:哪个更适合你的项目? 【免费下载链接】react-starter-kit Start your first React App. By using React, Redux, and React-Router. 项目地址: https://gitcode.com/gh_mirrors/reac/react-starter-kit …...
Unity3d之Timeline功能开发
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Timeline; using UnityEngine.Playables; using UnityEngine.Events;/// <summary> /// TimeLine控制器 /// </summary> public class TimeLineController : M…...
如何快速解锁QQ音乐加密音频的完整指南:QMCDecode工具终极解决方案
如何快速解锁QQ音乐加密音频的完整指南:QMCDecode工具终极解决方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录&…...
终极指南:3分钟学会用QMCDecode解锁QQ音乐加密格式
终极指南:3分钟学会用QMCDecode解锁QQ音乐加密格式 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换…...
iOS自动化测试环境搭建:Appium+Python真机与模拟器全链路通关指南
1. 为什么iOS自动化测试环境搭建总让人卡在第一步?“AppiumPython实现iOS自动化测试~环境搭建”——这个标题里藏着太多新手看不见的暗礁。我带过三届测试团队,每年都有至少7个人卡在“连不上真机”“Xcode报错找不到WebDriverAgent”“模拟器启动后白屏…...
Arty S7 FPGA开发板:从入门到进阶的硬件加速与嵌入式开发实战
1. 项目概述:为什么是Arty S7?如果你是一名嵌入式开发者、数字电路设计的学生,或者对硬件加速、实时信号处理感兴趣,那么“FPGA开发板”这个词对你来说一定不陌生。但面对市场上琳琅满目的开发板,从几百元到上万元不等…...
从RSSI走向信道探测,蓝牙设备的“距离感知”能力已至“厘米级”
长期以来,物联网(IoT)无线连接技术的发展重心主要聚焦于通信性能、通信功耗与组网效率等方面;然而,随着智能家居、数字车钥匙、工业自动化、智慧门禁、资产管理以及地理围栏等应用的快速扩张,行业正在提出一…...
STM32 USB开发避坑指南:手把手教你读懂并配置端点描述符(附完整代码)
STM32 USB开发避坑指南:手把手教你读懂并配置端点描述符(附完整代码) 在嵌入式开发领域,USB通信一直是让工程师又爱又恨的技术。爱它的通用性和高速传输能力,恨它那晦涩难懂的协议栈和层出不穷的配置问题。特别是当项目…...
Win11系统下,Java开发环境配置保姆级教程(JDK 8u201安装+环境变量避坑指南)
Win11系统Java开发环境配置全攻略:从零开始避坑指南 刚接触Java编程的新手们,面对陌生的开发环境配置往往感到无从下手。特别是对于非计算机专业背景的学习者来说,那些晦涩的术语和复杂的系统设置就像一堵高墙,让人望而生畏。本文…...
别再装ModelSim了!用HDLBits网页版5分钟搞定Verilog仿真和波形图
5分钟极速验证:用HDLBits网页版替代传统Verilog仿真工具 在图书馆公用电脑上突然有了个FPGA设计灵感,却发现自己没装ModelSim?公司电脑没有管理员权限,无法安装Vivado Simulator?别急着放弃——打开浏览器,…...
