01.27 Day 8 - 间隙锁和 next-key lock

2024-02-04 09:18
文章标签 key day 间隙 lock next 01.27

本文主要是介绍01.27 Day 8 - 间隙锁和 next-key lock,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是 Snow Hide,作为《MySQL 实战》这个专栏的学员之一,这是我打卡的第 8 天,也是我第 51 次进行这种操作。

今天我温习了该专栏里一篇叫《幻读是什么,幻读有什么问题?》的文章。

关键词总结:幻读是什么?、幻读有什么问题?(语义问题、一致性问题)、如何解决幻读?(间隙锁、next-key lock、Supremum、间隙锁生效场景)。

 

所学总结:

 

幻读是什么?

一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。幻读在 “当前读” 下才会出现。幻读仅指 “新插入的行”。
 

幻读有什么问题?

语义问题

事务一的语句根据某个字段的值的条件查询到了数据,事务二根据另一个值的条件更改将事务一查询时所依赖的字段的值更改成与事务一查询时所匹配的值,导致事务三在执行事务一相通的查询语句时多查出一条数据,这个操作破坏了事务一里查询语句的加锁声明。随后,事务四插入了一条数据,在事务一查询所依赖的字段上插入了与事务一查询条件匹配的值,导致事务四在执行与事务一相同查询语句时查询出新插入的数据,一共查询出三条语句,这也破坏了事务一查询语句的加锁声明。

一致性问题

锁的设计是为了保证数据的一致性。而这个一致性,不止是数据库内部数据状态在此刻的一致性,还包含了数据和日志在逻辑上的一致性。即使把所有的记录都加上锁,还是阻止不了新插入的记录,这也就是为什么 “幻读” 会被单独拿出来解决的原因。
 

如何解决幻读?

间隙锁

为了解决幻读问题,InnoDB 引入了间隙锁(Gap Lock)。
将两个值之间的空隙锁住。数据行是可以加上锁的实体,数据行之间的间隙也可以加上锁的实体。
跟间隙锁存在冲突关系的,是 “往这个间隙中插入一个记录” 这个操作。
间隙锁 = 开区间

next-key lock

开后闭区间。

Supremum

+∞是开区间。InnoDB 给每个索引加了一个不存在的最大值 spuremum,也就是 “前开后闭区间”。

间隙锁生效场景

在可重读隔离级别下才会生效。

 

末了

重新总结了一下文中提到的内容:全表扫描的加锁方式、解决幻读问题、引入间隙锁、由于间隙锁导致的死锁现象、间隙锁会影响系统的并发度。

这篇关于01.27 Day 8 - 间隙锁和 next-key lock的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

MySQL的隐式锁(Implicit Lock)原理实现

《MySQL的隐式锁(ImplicitLock)原理实现》MySQL的InnoDB存储引擎中隐式锁是一种自动管理的锁,用于保证事务在行级别操作时的数据一致性和安全性,本文主要介绍了MySQL的隐式锁... 目录1. 背景:什么是隐式锁?2. 隐式锁的工作原理3. 隐式锁的类型4. 隐式锁的实现与源代码分析4

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

Linux基础入门 --9 DAY

文本处理工具之神vim         vi和vim简介 一、vi编辑器 vi是Unix及类Unix系统(如Linux)下最基本的文本编辑器,全称为“visual interface”,即视觉界面。尽管其名称中包含“visual”,但vi编辑器实际上工作在字符模式下,并不提供图形界面。vi编辑器以其强大的功能和灵活性著称,是Linux系统中不可或缺的工具之一。 vi编辑器具有三种主要的工作模

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is