数据库面试题——锁
迪丽瓦拉
2025-05-29 04:24:06
0

了解数据库的锁吗?

锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。

InnoDB下两种标准行级锁:

  • 共享锁(S Lock),允许事务读一行数据。

  • 排他锁(X Lock),允许事务删除或更新一行数据。

如果一个事务T1已经获得了行r的共享锁,那么另外的事务T2可以立即获得行r的共享锁,因为读取并没有改变行r的数据,称这种情况为锁兼容。但若有其他的事务T3想获得行r的排他锁,则其必须等待事务T1、T2释放行r上的共享锁,这种情况称为锁不兼容。下图显示了共享锁和排他锁的兼容性,可以发现X锁与任何的锁都不兼容,而S锁仅和S锁兼容。需要特别注意的是,S和X锁都是行锁,兼容是指对同一记录(row)锁的兼容性情况。

意向锁:

  • 意向共享锁(IS Lock),事务想要获得一张表中某几行的共享锁。

  • 意向排他锁(IX Lock),事务想要获得一张表中某几行的排他锁。

由于InnoDB存储引擎支持的是行级别的锁,因此意向锁其实不会阻塞除全表扫以外的任何请求。故表级意向锁与行级锁的兼容性如下图所示。

死锁:

死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象。若无外力作用,事务都将无法推进下去。

解决死锁问题最简单的一种方法是超时,即当两个事务互相等待时,当一个等待时间超过设置的某一阈值时,其中一个事务进行回滚,另一个等待的事务就能继续进行。

除了超时机制,当前数据库还都普遍采用wait-for graph(等待图)的方式来进行死锁检测。较之超时的解决方案,这是一种更为主动的死锁检测方式。InnoDB存储引擎也采用的这种方式。wait-for graph要求数据库保存以下两种信息:

  • 锁的信息链表;

  • 事务等待链表;

通过上述链表可以构造出一张图,而在这个图中若存在回路,就代表存在死锁,因此资源间相互发生等待。这是一种较为主动的死锁检测机制,在每个事务请求锁并发生等待时都会判断是否存在回路,若存在则有死锁,通常来说InnoDB存储引擎选择回滚undo量最小的事务。

介绍一下间隙锁

InnoDB存储引擎有3种行锁的算法,间隙锁(Gap Lock)是其中之一。间隙锁用于锁定一个范围,但不包含记录本身。它的作用是为了阻止多个事务将记录插入到同一范围内,而这会导致幻读问题的产生。

InnoDB中行级锁是怎么实现的?

InnoDB行级锁是通过给索引上的索引项加锁来实现的。只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。

当表中锁定其中的某几行时,不同的事务可以使用不同的索引锁定不同的行。另外,不论使用主键索引、唯一索引还是普通索引,InnoDB都会使用行锁来对数据加锁。

相关内容

热门资讯

LinkedList源码解析 Java源码系列:下方连接 http://t.csdn.cn/Nwzed 文章目录...
软件测试2 web测试 (1)web控件测试 ​ 界面检查、单行文本框、多行文本框、...
JVM调优策略 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。   1.Full GC...
快速过一遍ThreadLoca... Thread属性之ThreadLocalMapThreadLocal是java的用来做线程隔离的一个...
【云原生-Docker】Doc... 前面大概介绍了下 Docker组成 Docker大部分的操作都围绕着它的三大核心概念:...
Android---动态权限申... 目录 权限分类 动态权限核心函数 简易实现案例 完整代码     Google 在 Android ...
镜像制作dockerfile编... 1.基于容器制作镜像 示例1: step(1)创建容器并编写内容 [root@...
tcp服务器设置accpet为... 监听socket必须绑定一个端口,以便其他客户端可以连接到这个端口,并与...
试题 历届真题 天干地支【第十... 一、试题来源:第十一届蓝桥杯——天干地支 资源限制 内存限制:256.0...
为什么需要在差分或者重要信号换... 大家可能如果对画PCB没有经验的话,可能不太理解为什么差分线在换层时需要在差分孔旁边打...
Linux线程同步 写在前面 来说线程最后一个内容,今天将补充线程互斥的缺陷,同时我们将学习最常见的一个设计模式,最后我...
快速安装TensorFlow2... 该教程仅适用于初学者,用CPU版本的TensorFlow,安装更快更简单...
从入门到精通:识别滑块验证码缺... 验证码识别是目前互联网应用中普遍存在的技术之一,它通过验证用户输入的信息是否符合要求来...
UART使用 目录 一、uart 二、终端 Terminal 1、终端的分类 2、终端对应的设备节点 三、串口的应...
ONLYOFFICE Docs... ONLYOFFICE Docs crack   文档编辑器   增加了对添加复杂字段的支持。   添...
数学建模-如何用matlab画... 1 画图基本指令hold on :保持打开的命令关闭图形保持功能hold off:title ( x...
ROC曲线和AUC值 ROC曲线(Receiver Operating Characteristic...
【2023.3.8】数据结构复... 【2023.3.8】数据结构复习笔记 文章目录【2023.3.8】数据结构复习笔记序言一、绪论二、线...
一个完整的渗透学习路线是怎样的... 前言 1/我是如何学习黑客和渗透? 我是如何学习黑客和渗透测试的,在这里...
HJ27 查找兄弟单词 描述 定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:...