MySQL锁机制详细笔记

1. MySQL锁的基本概念
  • 共享锁(Shared Lock):允许多个事务读取同一数据,不阻塞其他读操作。
  • 排它锁(Exclusive Lock):写锁,阻塞其他读写操作。
2. 锁的分类
  • 全局锁:锁定整个数据库实例,仅支持读操作。
  • 表级锁:锁定特定表,分为读锁和写锁。
  • 行级锁:锁定数据行或索引间隙。
3. 全局锁
  • 使用场景:全库逻辑备份,保证数据一致性。
  • 命令:flush tables with read lock; 加锁,unlock tables; 解锁。
4. 表级锁
  • 表读锁:允许读操作,阻塞写操作。
  • 表写锁:阻塞读写操作。
  • 元数据锁(MDL):自动加锁,保证表结构变更安全。
  • 自增锁(AUTO-INC Lock):事务性插入时产生。
5. 行级锁(InnoDB)
  • 记录锁:锁定索引记录。
  • 间隙锁:锁定索引间隙,防幻读。
  • 临键锁:组合记录锁和间隙锁。
  • 插入意向锁:INSERT操作前的间隙锁。
6. 意向锁
  • 表明事务准备持有行锁或正在某些行上持有锁。
  • 协调行锁和表锁的关系。
7. 加锁规则
  • 主键索引和辅助索引在等值条件和范围条件下的加锁行为不同。
  • 根据是否命中索引和查询条件,决定加记录锁或间隙锁。
8. 锁相关的参数
  • show status like 'innodb_row_lock%'; 查看行级锁定状态。
9. SQL加锁分析
  • 根据隔离级别和索引使用情况,分析SQL语句的加锁行为。
  • 考虑不同组合下(主键、唯一索引、非唯一索引、无索引)SQL的加锁情况。
10. 死锁产生原因与排查
  • 死锁原因:多个session加锁顺序不一致。
  • 排查方法show engine innodb status 查看死锁日志。
11. 避免死锁的策略
  • 保持事务轻量,减少资源占用。
  • 提高事务速度,避免子查询,使用主键。
  • 快速提交事务,减少锁持有时间。
12. 隔离级别对加锁的影响
  • 读已提交(RC):快照读,不加锁。
  • 可重复读(RR):可能加间隙锁防幻读。
  • 串行化(Serializable):所有读操作为当前读,加锁。
13. 复杂SQL加锁分析
  • 分析WHERE条件,确定index key范围、index filter和table filter。
  • 根据隔离级别和索引支持情况,确定加锁类型。

结论

  • MySQL锁机制复杂,涉及全局锁、表级锁和行级锁。
  • 加锁规则受隔离级别影响,不同级别下SQL加锁行为不同。
  • 死锁可通过优化事务逻辑和减少锁持有时间避免。
  • 深入理解锁机制有助于编写高效且避免死锁的SQL语句。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】初步认识C++

1. 初识C1.1 C概念相关1.2 C发展史及其重要性1.2.1 发展史1.2.2 重要性 2. C关键字3. 命名空间4. 输入和输出 个人主页:C_GUIQU 归属专栏:【C学习】 1. 初识C 1.1 C概念相关 C语言是结构化和模块化的语言,适合处理较小规模的程序。 【来源】…

Unity游戏帧率查看软件Fraps

Download Fraps 3.5.99 free version 下载、安装、运行这个软件,左上角就会自动显示帧率

跑腿平台小程序的设计

管理员账户功能包括:系统首页,个人中心,基础数据管理,管理员管理,接单详情管理,跑腿员管理,跑腿任务管理 微信端账号功能包括:系统首页,跑腿任务,接单员&…

windows上安装Frida环境

python安装 下载地址 Python Release Python 3.12.4 | Python.org python安装好后,使用如下命令安装frida客户端 pip install frida-tools 使用frida --version 查看frida版本 安装手机模拟器(雷电模拟器) 我的版本是4.0.61 查看CPU架构 adb …

SpringCloud进阶篇

文章目录 网关快速入门创建模块引入依赖修改启动类配置路由路由过滤(一般不用) 自定义GlobalFilter登录校验登录校验过滤器 微服务获取用户信息保存用户信息到请求头拦截器获取用户信息 OpenFeign传递用户信息配置共享添加共享配置拉取共享配置 配置热更新添加配置到Nacos配置热…

从零开始的python学习生活

第一天 pycharm部分好用快捷键 变量名的定义 与之前学习过的语言有所不同的是,python中变量名的定义更加的简洁 such as 整形。浮点型和字符串的定义 money50 haha13.14 gaga"hello"字符串的定义依然是需要加上引号,也不需要写;…

【docker】运行阶段遇到的问题

目录 1、查询docker 下挂载了哪些工具 2、docker中的简单命令 3、实际场景应用(redis) 目前工作中仅用到了redis,所以没有太多经验可以交流,暂时仅将我目前遇到的进行发布。还请见谅。 1、查询docker 下挂载了哪些工具 docker ps -a 或者…

新能源行业知识体系-------主目录-----持续更新

本文相当于目录方便快速检索内容,没有实际内容,只做索引 文章目录 一、电力市场概论二、蒙西电网需求侧响应三、蒙西电网市场结算V2.0三、2024内蒙古电力多边交易市场中长期交易相关事宜通知(讨论稿) 一、电力市场概论 是学习清华…

【区块链+基础设施】蜀信链 | FISCO BCOS应用案例

蜀信链是在四川省经济和信息化厅指导下,在四川省区块链行业协会组织下,由全省区块链相关从业与应用机构 共同参与建设和运营的区域性区块链基础设施,通过多方协同,共同打造合作共赢的区块链产业生态。 蜀信链区块链服务生态秉承“…

金融科技企业的数据治理与合规挑战

随着科技的发展,金融科技行业在我国得到了迅猛发展。金融科技创新不仅为消费者带来了便捷的金融服务,也极大地提高了金融行业的运营效率。然而,在金融科技发展的同时,数据治理与合规挑战也日益显现。本文将深入探讨金融科技企业在…

python如何安装各种库(保姆级教程)

使用Python爬虫时需要安装各种依赖库。安装一共有四种方法: 一、使用pip命令在线安装 二、在pycharm中在线安装 三、使用库的安装包本地安装 四、安装anaconda—anaconda中包含一般使用的所有库 一:pip安装 此步骤需要提前安装好python环境和pip。…

学习笔记——动态路由——OSPF(邻接/邻居)

十、OSPF的邻接/邻居 1、OSPF路由器之间的关系 (1)基本介绍 在OSPF网络中,为了交换链路状态信息和路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。 OSPF路由器的两种关系&#x…

大模型概述-定义/分类/训练/应用

大模型概述 随着时代的发展, 大模型各个领域的应用正在不断扩大. 本文尽力梳理各种材料, 将从概念定义, 类型分类, 训练以及应用等方面对大模型进行一个简要的概述. 如果你想了解大模型但是却缺乏基础的知识或者觉得无从下手, 那么阅读该文章可能对你有所帮助. 如果想了解更多…

linux深度deepin基于rsync和apt-mirror同步软件源及构建本地内网源

目录 一、rsync方式二、apt-mirror方式1.安装apt-mirror2.配置apt-mirror(/etc/apt/mirror.list)3.新建存放目录开始下载 3.发布mirror站点 一、rsync方式 参考官方文档地址: https://www.deepin.org/index/docs/wiki/05_HOW-TO/08_%E9%95%9C%E5%83%8F%E5%8A%A0%E9%…

机器学习原理之 -- 最近邻算法分类:由来及原理详解

最近邻算法(k-Nearest Neighbors,k-NN)是一种简单且直观的分类算法,广泛应用于分类和回归问题。由于其易于理解和实现,k-NN在数据挖掘、模式识别和机器学习领域中占据重要地位。本文将详细介绍最近邻算法的由来、基本原…

LabVIEW干涉仪测向系统

开发了一套基于LabVIEW的软件系统,结合硬件设备,构建一个干涉仪测向实验教学平台。该平台应用于信号处理课程,帮助学生将理论知识与实际应用相结合,深化对信号处理核心概念的理解和应用。 项目背景: 当前信号处理教学…

02 数据加工层 如何搭建用户与内容的标准规范体系

你好,我是周大壮。 01 讲我们提到了个性化流量分发体系的四个阶段,并着重讲解了数据采集阶段的内容。那么,这一讲我们主要围绕数据加工阶段的内容进行详细讲解。 在课程开始之前,我们先举一个场景进行说明。 近年来&#xff0c…

学习springMVC

第四章 Spring MVC 第一节 Spring MVC 简介 1. Spring MVC SpringMVC是一个Java 开源框架, 是Spring Framework生态中的一个独立模块,它基于 Spring 实现了Web MVC(数据、业务与展现)设计模式的请求驱动类型的轻量级Web框架&am…

昇思25天学习打卡营第7天|深度学习流程全解析:从模型训练到评估

目录 构建数据集 定义神经网络模型 定义超参、损失函数和优化器 超参 损失函数 优化器 训练与评估 构建数据集 首先从数据集 Dataset加载代码,构建数据集。 代码如下: #引入了必要的库和模块,像 mindspore 以及相关的数据处理模块等等。…

vue高德地图使用

先根据官方方法给vue项目引入高德 高德文档地址 做好准备后使用 初始化地图 AMap.plugin(AMap.MoveAnimation, () >{//地图this.map new AMap.Map("mapContainer", {resizeEnable: true,center: [116.397447,39.909176],//地图中心坐标zoom:12,//缩放值});this.…