MySQL数据库中的锁机制(通俗易懂)

总结

MySQL数据库中的锁机制主要用于管理并发操作,以确保数据的一致性和完整性。MySQL支持多种类型的锁,按粒度和使用场景主要分为以下几类:

  1. 全局锁

    • 全局锁(如FLUSH TABLES WITH READ LOCK)可以锁定整个数据库实例,阻止所有表的写入操作,常用于数据备份等场景。
  2. 表级锁

    • 表锁:锁定整张表,包括MyISAM引擎默认使用的表级锁,它在同一时刻只允许一个事务对表进行读取或写入。
    • MDL(Metadata Lock,元数据锁):在InnoDB中自动加上的轻量级锁,用于保护表的结构变更操作,不影响DML语句,但在DDL操作时会阻塞其他事务对表的操作。
  3. 行级锁

    • 共享锁(Shared Lock/S锁):多个事务可同时获取同一行记录的共享锁,用于读取操作,互不阻塞。
    • 排他锁(Exclusive Lock/X锁):一个事务对一行记录加排他锁后,其他任何事务不能对该行再加任何类型的锁,用于更新或删除操作。
    • 间隙锁(Gap Lock):在范围查询条件下,InnoDB会在索引记录之间的间隙加上锁,防止其他事务插入新的记录造成幻读问题。
    • 临键锁(Next-Key Lock):结合了行锁和间隙锁,不仅锁定记录本身,还锁定其前后的间隙。
  4. 意向锁

    • 意向共享锁(Intention Shared Lock/IS锁):事务打算在某一行上加共享锁时,先在表级别加意向共享锁。
    • 意向排他锁(Intention Exclusive Lock/IX锁):事务打算在某一行上加排他锁时,先在表级别加意向排他锁。

在实际应用中,选择何种锁取决于业务需求和存储引擎特性:

  • 对于读多写少且不需要高并发的场景,表级锁简单易用,开销较小。
  • InnoDB存储引擎因其支持行级锁,在需要高并发处理和事务安全的应用中表现优秀,能够提供更好的并发性能和更细粒度的数据控制。

例子


熊大(代表事务A):“光头强,我正在看森林里某一棵果树的数据,你别动它!”

光头强(代表事务B):“好的熊大,那我就给你这棵树的数据加个‘共享锁’,咱们都能查看但都不能砍。”


熊大:“我要给苹果树挂牌子,光头强你先别碰这棵树。”

光头强:“明白,熊大,我现在要给它加个‘排他锁’,这样你就只能看我挂牌子,其他人暂时不能做任何操作。”


熊二(代表事务C):“嘿,我也要看果树林里的某个地方是否有新长出的小树苗。”

熊大:“哦,熊二,我已经查过那里没有树苗,并且为了防止光头强突然种下新树,我连空隙都上了‘间隙锁’。”


光头强:“哼,我要把这片区域的所有树木信息全部更新,为了避免你们误读,我会先加一个‘意向排他锁’,告诉你们我接下来可能要对这一片林子的每棵树都上排他锁。”

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

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

相关文章

常见物联网模型优缺点简介

物联网模型多种多样,每种模型都有其独特的优点和局限性。以下是一些常见的物联网模型及其优缺点概述: 集中式模型: 优点: 数据管理和处理集中化,便于统一监控和维护。安全性较高,数据在中心节点进行统一加…

centos7 配置ip

查看网卡 [rootcentos ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverine…

Linux 常用操作命令大全

目录 一、命令大集合 1.1 whereis 1.2 which 1.3 sudo 1.4 grep 1.5 free 1.6 top 动态显示进程的状态 1.7 ps 静态显示进程信息 1.8 df 1.9 iostat 看IO性能状态 1.10 yum安装插件命令 1.11 rpm 1.12 scp远程拷贝 1.13 uname 二、linux网络命令 2.1 centos7 防火…

SpringCloudAlibaba Nacos配置及应用

Nacos搭建及配置 nacos本机服务搭建 windows上搭建单机nacos&#xff1a; Releases alibaba/nacos GitHub 下载安装包 下载本地&#xff0c;解压&#xff0c;直接运行&#xff08;保证安装包的绝度路径只有英文字符&#xff0c;有中文会导致运行失败&#xff09;&#xff…

开发语言详解(python、java、Go(Golong)。。。。)

是语言决定行业&#xff0c;还是行业决定语言&#xff0c;说不清&#xff0c;只是觉得&#xff0c;当你做这一行的时候&#xff0c;如果你还有精力感兴趣的话&#xff0c;可以再做些了解&#xff0c;一下是自己个人见解以及官网做的整合。希望对大家有用。 目录 Python 概念&…

Milvus数据实体的插入、修改、删除

本节介绍如何通过客户端向 Milvus 中插入数据。您还可以使用 MilvusDM 将数据迁移到 Milvus&#xff0c;MilvusDM 是一款专门用于使用 Milvus 导入和导出数据的开源工具。   Milvus 2.1 支持标量字段上的 VARCHAR 数据类型。为VARCHAR类型标量字段构建索引时&#xff0c;默认…

MySQL 多表查询与事务的操作

一,多表联查 有些数据我们已经拆分成多个表,他们之间通过外键进行连接.当我们要查询两个表的数据,各取其中的一列或者多列. 这时候就需要使用多表联查. 数据准备: # 创建部门表 create table dept(id int primary key auto_increment,name varchar(20) ) insert into dept (n…

DevEco Studio 项目创建

安装DevEco Studio后开始使用&#xff0c;双击桌面DevEco Studio 快捷方式弹出界面&#xff1a; 选择Application —> Empty Ability&#xff0c;点击Next 项目配置 Project name&#xff1a;工程的名称&#xff0c;可以自定义&#xff0c;由大小写字母、数字和下划线组成。…

vscode搜索总是搜到修改记录文件如何处理

如图每次搜索出来的结果总是有好多编辑记录中的文件&#xff0c;给自己找文件及提交代码时带来很大困扰&#xff0c;每次都得删特别麻烦。 解决办法&#xff1a; 如上图在插件里找到 local history 点击 ”禁用“ 即可。以后再编辑代码就不会产生修改记录文件了。 如果直接搜索…

深入浅出前端本地储存

引言 2021 年&#xff0c;如果你的前端应用&#xff0c;需要在浏览器上保存数据&#xff0c;有三个主流方案&#xff1a; CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

前端Prettier 插件的使用配置(详细)

各个参数代表的意思:printWidth&#xff1a;每行代码的最大长度限制。 tabWidth&#xff1a;选项用于控制制表符的宽度。 useTabs&#xff1a;指定是否使用制表符代替空格。 semi&#xff1a;指定是否在语句的末尾添加分号。 singleQuote&#xff1a;指定是否使用单引号或双引号…

【Java程序员福音】每个 Java 开发人员都应该知道的 10 个基本工具

我试图在代码库,项目规划,构建和部署,测试自动化和基础设施自动化中包含工具。作为负责端到端管理项目的高级 Java 开发人员,这些工具将帮助您更有效地完成工作。 让我们看到 Java 程序员的一些基本工具 1、Git 我认为 Git 和 Github 应该是所有 Java 程序员应该学习和掌…

如何使用vue插件Konva实现图片的缩放

前提问题&#xff1a;要完成数据标注的第一步&#xff0c;使用vue插件Konva实现图片的缩放 解决过程&#xff1a;首先安装插件Konva&#xff0c;再进行初始化&#xff0c;嵌入图片&#xff0c;Konva官网地址 解决结果&#xff1a; 1.安装Konva npm install vue-konva konva …

②免费AI软件开发工具测评:通义灵码 VS 码上飞

前言 我又双叒叕来测评了&#xff01;上次给大家带来的是iFlyCode和CodeFlying两款产品的测评&#xff0c;受到了大家的一致好评~ 今天咱就继续来聊聊&#xff0c;这次我们选的的对象是通义灵码和码上飞&#xff0c;从名字上也能看到出来这两款产品一定是跟软件开发有关系的&…

Zerotier 异地组网方案初探

前言 我之前想要异地组网的话&#xff0c;一般都采用内网穿透的方法&#xff0c;但是这个内网穿透有弊端就是都是要通过公网服务器转发流量&#xff0c;对于大流量的传输就比较不方便&#xff0c;我发现了Zerotier 这个工具非常的好用&#xff0c;是基于p2p的 这是一个类似于…

C++初阶:初识模板

在之前的C与C编程中&#xff0c;针对实现同样类型功能的函数我们学会使用了函数重载&#xff0c;终于可以不用记忆多个功能相同但是函数名不同的函数了喵。但是在实现的时候仍然显得有点不太方便&#xff0c;有些冗余。世界是懒人的世界&#xff0c;为了方便懒人的使用&#xf…

YOLOv8 服务器与本地tensorboard映射

TensorBoard: Start with ‘tensorboard --logdir runs/detect/train12’, view at http://localhost:6006/ 服务器端输入后本地一直打不开&#xff0c;无法访问。 解决方法&#xff1a;对服务器6006端口与本地端口进行映射&#xff0c;从而完成本地查看TensorBoard 本地cmd输…

多个OncePerRequestFilter过滤器实现的使用及顺序

多个OncePerRequestFilter过滤器实现的使用及顺序 作用 在一次外部请求中只过滤一次, 对于服务器内部之间的forward等请求&#xff0c;不会再次执行过滤方法可以定义多个实现类, 各自处理各自的过滤工作, 并指定过滤顺序 使用场景 token校验有效性Xss处理敏感词汇过滤 … …

驶向高效巅峰:Nginx高并发性能优化实战指南与场景案例拆解

身处瞬息万变的互联网世界&#xff0c;高并发场景下服务器的性能优化尤为重要&#xff0c;而Nginx正是这一领域的超级舵手。本文将深入浅出地揭示Nginx在高并发环境下的性能优化之道&#xff0c;并通过具体场景配置案例&#xff0c;助你掌握这一关键技术&#xff0c;提升服务器…

静态网络配置

一、查看网络命令 1.命令行查看网络配置 1、查看ip\硬件设备-网卡 ifconfig -a ifconfig ens160 网卡名称 ip addr show ip addr show ens160 nmcli device show ens160 nmcli con up ens160 2、主机名称 hostname hostname hfj.huaxia.com 3、查看路由和网关 rou…