MySql锁知识记录积累(一)

news2024/11/15 17:52:48

1.关于脏读、幻读和不可重复读

脏读:一个事务A读取到了另一个事务B未提交的数据,叫做脏读
不可重复读:事务A被事务B干扰到了!在事务A范围内,两个相同的查询,读取同一条记录,却反返回了不同的结果,即不可重复读
幻读:事务A查询一个范围内的结果集,另一个并发事务B往这个范围中插入/删除了数据,并提交。然后事务A再次查询,结果查询到了不同的结果,这就是幻读。

2.事务隔离级别


在并发情况下,读未提交的事务隔离级别下,是不加锁的会存在 脏读、幻读和不可重复读的问题

3.InnoDB七种锁介绍

3.1共享/排他锁

InnoDB存储引擎实现了两种标准的行级锁:共享锁-Share(简称S锁)、排他锁(简称X锁)

  • 共享锁:在事务想要读取一条记录的时候,需要先获取该记录的共享锁。
  • 排他锁:在事务想要修改一条记录的时候,需要先获取该记录的排他锁。

共享锁存在的意义

  • 存在若干个事务想要读取一条记录,需要先获得该记录的共享锁,是为了避免该记录被其他事务所修改。

排他锁存在的意义

  • 当一个事务想要修改一条记录,需要先获得该记录的排他锁,此时其他事务无法读取该数据,直到排他锁释放。

3.2意向锁

意向锁解释:不与行级别锁冲突的表级锁。未来某个时刻,事务可能需要加共享锁或者排他锁的时候,先提前声明一个意向。是一个表级别的锁。

为什么需要意向锁?

  • 假设一个事务A获取了表中一行数据的排他锁
  • 此时事务B想要读取全表数据,需要对整张表加共享锁,因此需要保证表中不存在排他锁
  • 问题来了
    • 事务B想要判断表中是否存在排他锁,难道要全表遍历?
    • 为了解决该问题,因此有了意向锁

实际运行过程

  • 当一个事务A想要对表中的数据进行 读取/修改 的时候,需要向增加一个全表级别的 意向共享锁/意向排他锁
  • 此时其他事务想要对全表中的数据进行修改,就会发现表中存在全表级别的 意向锁,从而不需要避免了全表找锁

3.3记录锁

记录锁是粒度最小的锁,仅仅锁住一行。
记录锁加在索引上,如果一张表中没有索引,InnoDB会隐式创建一个索引,并用该索引加记录锁。
记录锁关键词lock_mode X locks rec but not gap

3.4间隙锁(Gap Lock)

间隙锁是一种加在两个索引之间的锁,或者加在第一个索引之前,最后一个索引之后的间隙,锁住的是一个区间。
lock_mode X locks gap before rec
为了解决幻读问题
间隙锁左右都是开区间

当SQL语句查询范围数据的时候,会对查询的范围区间加上间隙锁。
此时,其他事务无法在加上了间隙锁的范围区间内插入新的数据,避免了幻读。

间隙锁仅在 RR 隔离级别下出现

PS:在RR(可重复读)的隔离级别下,普通查询是快照读,不会发生幻读。如果使用“当前读”(即:for update)才有可能发生幻读

3.5临键锁(Next-Key Lock)

临键锁:锁住索引本身和索引之前的间隙,左开右闭区间

临键锁的加锁场景:当SQL使用非唯一索引的条件进行数据检索的时候,会给匹配到的行加上临键锁

如下表数据

idnamesexage
1kk10
2lily20
3LiNa30
4QQ40
5HH60
6ZZ80
7NN100

在该表的 age 列增加普通非空唯一索引。
那么临键锁可能的区间为

  • (负无穷, 10] (10, 20] (20, 30] (30, 40] (40, 60] (60, 80] (80, 100] (100, 正无穷)

临键锁的具体产生场景:

  • 如果是等值查询且记录存在,即 begin; select * from xxx where age = 30 for update;
    • 此时仅仅会锁住 age=30 这一行记录
  • 等值查询且记录不存在,即 begin; select * from xxx where agen = 45 for update;
    • 此时会锁住 [40, 60] 的间隙 若 40 <= age <= 60 则会插入失败
  • 范围查询 select * from where age >= 25 and age <=35
    • 首先查询 age = 25 的记录判断是否存在,不存在 临键锁 (20, 30]
    • 同上 age = 35 不存在,加锁 (30, 40]
    • 总加速范围 Next-Key Lock (20, 40]

加锁规律总结

唯一索引等值查询

  • 查询记录存在,记录锁 Record Lock
  • 不存在,间隙锁 Gap Lock

唯一索引范围查询

  • 间隙锁或记录锁

非 唯一索引等值查询

  • 记录存在 Next-key Lock 临键锁 和 间隙锁 Gap Lock
  • 记录不存在 间隙锁 Gap Lock

非 唯一索引范围查询

  • Next-Key Lock 临键锁

3.6插入意向锁

在执行插入一行记录操作之前设置的一种间隙锁。
解决的问题:

  • 多个事务,在同一个索引范围区间内,执行插入操作的时候,如果插入的数据不冲突,就不会阻塞彼此。
  • 假设 数据范围 [7, 100] 多个时候在范围区间内插入不同数据的时候不会阻塞

3.7自增锁

特殊的表级别锁,针对 AUTO_INCREMENT

  • 如果表中新增一条数据,就会持有自增锁
  • 此时其他事务向表中插入数据必须等待自增锁释放,以便保证连续的主键值

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

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

相关文章

运行一个新vue项目踩坑

npm install报错了&#xff0c;主要是因为node版本太高了。去node官网&#xff0c;下载低版本的msi后缀的文件&#xff0c;运行安装。在vs code里&#xff0c;npm下载依赖&#xff0c;并运行即可。 1. 无法cnpm cnpm : 无法加载文件 D:\Program Files\nodejs\node_global\cnpm.…

前端放大镜效果实现

放大镜效果实现 放大图片的需求&#xff0c;一般是在原有的渲染之上&#xff0c;额外添加一个放大框&#xff0c;当鼠标在原图上移动&#xff0c;放大框内就以当前的鼠标为中心&#xff0c;局部放大一定范围&#xff0c;在淘宝商城中是常有的实现。下面将用两种实现。 1、使用d…

是德 DSOX1202A示波器技术参数

KEYSIGHT是德科技 lnfiniiVision 1000 X 系列示波器是具有专业级功能的入门级示波器&#xff0c;配备的联网软件可提供远程控制和数据记录等功能。 它集 6 种仪器的功能于一身&#xff0c;属于是德科技智能测试台必备仪器之一。该系列包含 4 款独具特长的仪器&#xff0c;通过同…

5年功能测试要18K,一问三不知,还反过来怼我,真是醉了····

最近看了很多简历&#xff0c;很多候选人年限不小&#xff0c;但是做的都是一些非常传统的项目&#xff0c;想着也不能通过简历就直接否定一个人&#xff0c;何况现在大环境越来 越难&#xff0c;大家找工作也不容易&#xff0c;于是就打算见一见。 在沟通中发现&#xff0c;由…

坚持#第418天~久违了,二维码系统

公司有了一个新客户&#xff0c;这家客户的货物都是用铁架框装的&#xff0c;铁架框长得都一样&#xff0c;不好区分&#xff0c;只能看标签来识别&#xff0c;而且发货时需要一一核对发货单上的交货单号对应的货物&#xff0c;标签上的发货单号必须要一致才行&#xff0c;导致…

【干货】Kali Linux渗透基础知识大全,零基础入门必看!

最近好多朋友问我&#xff1a;不会编程&#xff0c;英语也不好&#xff0c;dos命令也记不住&#xff0c;能学习黑客技术么&#xff1f; 我可以明确告诉大家&#xff0c;可以的&#xff01; 相信每一个少年心中&#xff0c;曾经都有过一个黑客梦&#xff01; 有人觉得黑客霸气…

常用的开源自定义表单有哪几大优势特点?

当前&#xff0c;办公已经进入流程化和自动化的阶段&#xff0c;要想跟随着社会发展&#xff0c;引用开源自定义表单工具可以使办公协作效率得到快速提升&#xff0c;它的灵活、便捷、易操作等特点&#xff0c;使得该表单工具深受当今职场的喜爱&#xff0c;是做好数据管理&…

Flutter 库:强大的下拉刷新上拉加载框架——EasyRefresh

Flutter 库&#xff1a;强大的下拉刷新上拉加载框架——EasyRefresh 文章目录 Flutter 库&#xff1a;强大的下拉刷新上拉加载框架——EasyRefresh一、概述1、简介2、特征3、在线演示4、APK下载5、接口参考 二、官方示例1、默认构造函数2、生成器构造函数3、指示器定位4、使用指…

2023年网络安全HW攻防技术总结(珍藏版)

2022年护网正当时&#xff0c;相信不少网安人都已经进入了状态。 我们都知道&#xff0c; 护网行动 是国家应对网络安全问题所做的重要布局之一。至今已经是7个年头了&#xff0c;很多公司在这时候人手不够&#xff0c;因此不得不招募一些网安人员来参加护网。 红队 扮演攻击…

Linux搭建Java环境——安装JDK

一、上传jdk1.8文件 首先通过Xftp 7软件&#xff0c;将jdk文件传输到Linux上&#xff08;连接和Xshell 7方法相同&#xff0c;软件资源在首页中的下载栏处免费获取&#xff09;当然需要在opt文件夹下先新建jdk的文件夹 二、解压jdk文件 解压完成后可以发现蓝色的jdk1.8的目录生…

Android Studio实现五子棋小游戏

项目目录 一、项目概述二、开发环境三、详细设计1、布局设计2、验证码3、AI人机4、背景音乐 四、运行演示五、项目总结 一、项目概述 五子棋是一种两人对弈的策略型棋类游戏&#xff0c;本次五子棋小游戏具有人机对战和人人对战两种玩法。人机对战可以单人挑战AI&#xff0c;实…

SQL语言的规则与规范

SQL语言的规则与规范 前言一、SQL概述1、SQL背景知识2、SQL语言排行榜3、SQL 分类 二、SQL语言的规则与规范1、基本规则2、SQL大小写规范 &#xff08;建议遵守&#xff09;3、注 释4、命名规则&#xff08;暂时了解&#xff09;5、数据导入指令 前言 本博主将用CSDN记录软件开…

怎么用pe系统重装系统,如何用pe重装系统

其实&#xff0c;电脑装系统并没有这么难&#xff0c;尤其是u盘pe系统相对来说比较简单一点。但是&#xff0c;现在还有很多朋友一直在问这个是怎么装系统的&#xff0c;关键是装系统耗的时间比较长&#xff0c;步骤好像很复杂的样子&#xff0c;担心自己操作出现失误。确实&am…

Ansys Zemax | 如何以数据的方式定义网格矢高表面

引言 本文示范了如何输入表面起伏数据&#xff0c;以定义Zemax OpticStudio中的网格矢高 (Grid Sag) 类型表面&#xff0c;表面起伏数据应为Z坐标轴上的矢高 (Sag)。(联系我们获取文章附件) 正文 表面起伏数据格式是这样定义的&#xff1a; 第一行&#xff0c;由7个数字表示。 …

ASEMI代理英飞凌TDK5100F射频模块的性能与应用分析

编辑-Z 本文将对TDK5100F射频模块进行详细的介绍与分析&#xff0c;包括其性能特点、应用领域、使用方法。通过对这三个方面的阐述&#xff0c;希望能够帮助读者更好地了解TDK5100F射频模块的优势和应用场景。 1、TDK5100F射频模块的性能特点 TDK5100F射频模块是一款高性能的…

IPV6地址基础

IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写&#xff0c;是互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代IPv4的下一代IP协议。其地址数量号称可以为全世界的每一粒沙子编上一个地址 1. ipv6地址表示方法 IPv6的…

【前端播放器】前端播放器的时延问题小总结

目录 结论 播放器的优化测试与小结论 结论 根据理论知识&#xff0c;及代码查看&#xff0c;实验后 【ZLM】ZLM源码阅读三----延时问题_dualven_in_csdn的博客-CSDN博客 发现&#xff0c;结论大概与文中相同 &#xff1a;主要的延时&#xff0c;主要是播放器端形成的。 播放…

科技数据分析,2022年授权通过的专利数高达近80万项

哈喽大家好&#xff0c;中国科技发展在近年来取得了巨大进步&#xff0c;相关部门也积极推动科技创新&#xff0c;加大科技投入&#xff0c;鼓励企业加强研发&#xff0c;加速科技成果转化落地。此外&#xff0c;中国还在国际科技合作方面取得了积极进展&#xff0c;与各国合作…

使用 Golang 在 GitLab 上拉取代码并将静态资源部署到 Nginx,同时将图库上传至阿里云 OSS

使用 Golang 在 GitLab 上拉取代码并将静态资源部署到 Nginx&#xff0c;同时将图库上传至阿里云 OSS 本文章采用几个任务执行 最终想要实现效果&#xff0c; 1、golang做成一个服务占用一个端口&#xff0c;然后监测gitlab仓库webhook 2、前端人员提交代码到gitlab&#xff…

5.3图的综合应用算法

一.最小生成树算法 1.概念&#xff08;Minimum-Spanning-Tree&#xff09;MST 生成树&#xff1a;针对于连通图&#xff0c;包含全部顶点&#xff0c;去掉一条边后不连通&#xff0c;加一条边形成环 最小生成树:带权连通无向图&#xff0c;边的权值之和最小的生成树(MST) 2.…