MySQL 锁篇

news2024/11/24 9:42:25

1. MySQL 有哪些锁?

       1)全局锁  执行后整个数据库就处于只读状态,一般用于全库逻辑备份

       2)表级锁:

               表锁:

                        表级别的共享锁:读锁     

 

                        表级别的独占锁:写锁

                元数据锁(MDL):当我们对数据库进行操作的时候,就会给表加上元数据锁

                           当我们对一张表进行CRUD时,加的是MDL读锁

                           对一张表进行表结构变更时,加的是MDL写锁。

               意向锁:当执行增删改查,需要先对表加上意向独占锁,然后再对该纪录加独占锁

                           加意向锁的目的是快速判断表中是否有记录被加锁

               AUTO-INC 锁:表里的主键通常设为自增的,这是通过对字段声明AUTO-INCREMENT                                             实现的

    3)行级锁

            Record lock 记录锁(对表中某一行的数据进行上锁) :

                S锁:当一个事务对记录加了S锁后,另一个事务也可以加S锁,但是不能加X锁

                X锁:当一个事务对记录加了X锁后,其他事务不能再加X锁,也不能再加S锁

            间隙锁:就是在用于可重复读隔离级别,目的是就解决可重复读隔离级别下幻读的情况

                       间隙锁是可以兼容的,即两个事务可以拥有共同的间隙范围的间隙锁。并不存在互斥关系。

             临建锁:是记录锁+间隙锁  锁住一个范围,并锁住记录本身。

2.  MySQL是怎么加锁的

      唯一索引等值查询:

              当查询的记录是存在的,在索引树上定位到这一条记录之后,将记录的索引的临建锁退化成记录锁,仅靠记录所就可以避免幻读现象。X型的意向锁和独占锁。

             当查询的记录不存在时,在索引书上找到第一条大于该查询记录的记录后,将该记录的索引的临建锁退化成间隙锁。

     非唯一索引等值查询:

  • 当查询的记录「存在」时,由于不是唯一索引,所以肯定存在索引值相同的记录,于是非唯一索引等值查询的过程是一个扫描的过程,直到扫描到第一个不符合条件的二级索引记录就停止扫描,然后在扫描的过程中,对扫描到的二级索引记录加的是 next-key 锁,而对于第一个不符合条件的二级索引记录,该二级索引的 next-key 锁会退化成间隙锁。同时,在符合查询条件的记录的主键索引上加记录锁
  • 当查询的记录「不存在」时,扫描到第一条不符合条件的二级索引记录,该二级索引的 next-key 锁会退化成间隙锁。因为不存在满足查询条件的记录,所以不会对主键索引加锁

     

非唯一索引和主键索引的范围查询的加锁规则不同之处在于:

  • 唯一索引在满足一些条件的时候,索引的 next-key lock 退化为间隙锁或者记录锁。
  • 非唯一索引范围查询,索引的 next-key lock 不会退化为间隙锁和记录锁。

     

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

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

相关文章

一文吃透 Vue 框架教程(下)

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

【Spring】— MyBatis配置文件元素

目录 MyBatis配置文件元素properties元素settings元素typeAliases元素typeHandler元素objectFactory元素plugins元素environments元素mappers元素 MyBatis配置文件元素 使用MyBatis框架进行开发,需要创建MyBatis的核心配置文件,该配置文件包含重要的元素…

sqlite数据如何转成mysql数据类型

一、使用工具Navicat Premium 16 1.把db文件拖到Navicat Premium中,选择数据库,点击工具,数据传输 选择下一步 下一步 开始 这样就成功了,生成的sql文件就在你保存的位置了。 二、使用SQLiteStudio转换成mysql文件 1.打开SQLite…

关键字volatile 和信号

volatile是c语言中的一个关键字,在语言层面我们很难理解它,今天从信号角度我们来理解一下。 我们来看下面一段代码: 从代码表面看上去运行逻辑应该是,flag为0时候一直while循环,当有信号2产生进入到信号2的处理函数中…

Java - 集合工具类Collections

文章目录 目录 文章目录 前言 二.collections提供的方法 三. 方法详解 1.addAll:将所有指定元素添加到指定 collection 中。 可变参数 添加方式 二.shuffle():随机打乱List集合中的元素 三. sort():对List集合进行排序; 实现compata…

软件测试:提升jemeter报告输出品质,精通动态参数处理技巧并进行组件极致优化

目录 引言 一.测试报告生成 二.动态参数处理 1.正则 2.json提取器 3.JMeter动态参数处理逻辑是什么?【面试必考】 三.jemter常用的组件 四.JMeter是怎么做API自动化测试的? 五.针对一个服务,你怎么测试? 引言 当今互联网…

spring jpa/hibernate 查询缓存导致内存溢出

版本 hibernate-5.6.10 问题 应用运行一段时间后发生堆空间不足内存溢出 根据内存快照可见大量org.hibernate.engine.query.spi.QueryPlanCache对象 原因 QueryPlanCache会缓存sql,以便于相同的sql重复编译 如果大量使用in查询,由于参数数量不同&a…

《程序员面试金典(第6版)》面试题 02.02. 返回倒数第 k 个节点(双指针法,链表)

题目描述 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 题目传输门:添加链接描述 示例: 输入: 1->2->3->4->5 和 k 2 输出: 4说明: 给定的 k 保证是有效的。 解题思路与…

Axure教程-横向动态堆叠图(中继器)

本文将教大家如何用AXURE中的中继器动态横向堆叠图 一、效果介绍 如图: 预览地址:https://3ajwd3.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87810612 二、功能介绍 简单填写中继器内容即可生成动态竖向堆…

移动应用测试不可少的技能,使用Appium和Python实现Activity切换

目录 前言: 一、Appium简介 二、切换Activity操作 三、使用 Appium 实现切换 Activity 操作的注意事项 四、结论 前言: App测试自动化是当前移动应用开发测试领域中的热点之一。在应用开发的过程中,切换Activity是一个常见的操作&#x…

网易易盾流量多发反外挂落地实践

背景及目的 环境迁移 反外挂服务建德机房线上迁移,采取的方案是:建德机房独立部署一套完整的集群,统一经由完整的性能测试、故障演练、功能回归后,通过线上分阶段切换流量的方式来切服务。QA 需要比对验证 2 个不同环境下核心接口…

PostgreSQL技术内幕(八)源码分析 ——投影算子和表达式计算

在上期Postgres技术内幕系列直播中,我们为大家介绍了Postgres投影算子和表达式计算实现原理和底层细节。本文根据直播内容整理,作者现任HashData内核研发工程师。 投影 (projection) 关系代数中的一种, 用于从关系R中选出属性包含在A中的列…

简单易懂,一篇文章告诉你什么是云渲染!

随着5G、AI、云计算、云服务等资讯来袭,我们发现云渲染被更多人知晓和关注,通过搜集和调研云渲染业内的相关信息和模式,尽量用简明的方式为大家解答到底 什么是云渲染。 用户将本地任务提交到远程服务器,通过远程的计算机集群资源…

C++ 类和对象(静态的static、友元、内部类、匿名对象、explicit)知识点+完整思维导图+实操图+深入细节通俗易懂建议收藏

绪论 时间的步伐有三种:未来姗姗来迟,现在像箭一样飞逝,过往永远静立不动。本章是类和对象的一个收尾篇,相信通过这三篇类和对象的学习,应该你已经更加清楚了解了C的类和对象。 话不多说安全带系好,发车啦&…

耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道····

一提及外包测试,大部分人的第一印象就是:工作强度大,技术含量低,没有归属感! 本人毕业于某普通二本院校非计算机专业,跨专业入行测试,至今有近 5年工作经验。 第一份测试工作是在华为做了两年外…

【LCM】LCM通讯入门

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍LCM的通讯。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 🥞喜欢的朋友可以关注一下,下次更新…

Linux-初学者系列6_kvm虚拟机

速通配置kvm虚拟机 通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。 在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可以运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行互不影响,提高计算机的工作效率。 一、 配置…

真题详解(include)-软件设计(八十二)

真题详解(快速排序)-软件设计(八十一)https://blog.csdn.net/ke1ying/article/details/130806047 generalliza(泛化):泛化是一种继承关系,子类将继承基类所有行为,关系和通信&#…

章节2:Burp Suite配置启动

章节2:Burp Suite配置启动 01 Burp Suite程序下载 程序下载 Burp Suite jar包JDK,JDK包含JRE(Java运行时环境)激活jar包汉化jar包 Burp jar包 推荐2021,jar包版本 https://portswigger.net/burp/releases JRE环…

带你手撕链式二叉树—【C语言】

前言: 普通二叉树的增删查改没有意义?那我们为什么要先学习普通二叉树呢? 给出以下两点理由: 1.为后面学习更加复杂的二叉树打基础。(搜索二叉树、ALV树、红黑树、B树系列—多叉平衡搜索树) 2.有很多二叉树…