Mysql—锁相关面试题(全局锁,表级锁,行级锁)

文章目录

锁的分类

  • 1.全局锁

通过 flush tables read wirh lock,语句会将整个数据库处于只读状态,此时其他线程进行增删改,或者表结构的修改就会进行阻塞。全局锁主要用于全库数据备份。防止在备份整个数据时,其他线程操作数据库,使备份的数据库数据与真实数据库数据不一致。

  • 2.表级锁

表级锁分为以下几种锁:

  • 表锁:通过lock tables 语句可以对表加表锁,表锁会限制本线程以及其他线程的读写
  • 元数据锁:当我们对数据库表进行操作时,会自动加上元数据锁(MDL),对表进行CRUD时加的是MDL读锁。当对表结构进行修改时,加的是MDL写锁。元数据锁是为了防止在进行CRUD时其他线程对表结构进行变更。
  • 意向锁 :当执行更新,插入,删除操作时,需要先对表加上意向独占锁,然后对该记录加上独占锁。意向锁的目的是快速判断表里是否有记录被加锁
  • 3.行级锁:InnoDB 引擎是支持行级锁的,而 MyISAM 引擎并不支持行级锁。
  • 记录锁,锁住的是一条记录。而且记录锁是有 S 锁和 X 锁之分的,满足读写互斥,写写互斥
  • 间隙锁,只存在于可重复读隔离级别,目的是为了解决可重复读隔离级别下幻读的现象。
  • Next-Key Lock 称为临键锁,是 Record Lock + Gap Lock 的组合,锁定一个范围,并且锁定记录本身。

表锁和行锁的作用

表锁的作用:

  • 整体控制:表锁可以用来控制整个表的并发访问,当一个事务获取表锁时,其他事务无法对该表进行任何读写操作,从而保证数据的一致性。
  • 颗粒度大:表锁的颗粒度比较大,在锁定表操作时,可能会影响到表的其他操作。可能引起锁的竞争和性能问题。
  • 适用于大批量操作:表锁适合于需要大批量操作表中数据的场景,例如表的重建、大量数据的加载等。
    行锁的作用:
  • 细颗粒度控制:行锁可以精确控制对表中某行数据的访问,使得其他事务可以同时访问表中其他行数据。提高并发性能。
  • 减少锁冲突:行锁不会像表锁那样造成整个表的冲突,减少了锁竞争,提高并发访问效率。
  • 适用于频繁单行操作:行锁适用于需要频繁对表中数据单独操作的场景。

MYSQL两个线程update语句同时处理一条语句,会不会有阻塞?

会,因为 InnoDB 存储引擎实现了行级锁。当A事件对id=1这行数据进行update操作时,会对主键为1的记录添加x类型的记录锁。这样事务2对其再进行更新时会发现已经存在记录锁,进程就会阻塞。

如果2个范围不是主键或索引?还会阻塞吗?

如果2个范围查询的字段不是索引的话,那就代表 update 没有用到索引,这时候触发了全表扫描,全部索引都会加行级锁,这时候第二条 update 执行的时候,就会阻塞了。因为如果 update 没有用到索引,在扫描过程中会对索引加锁,所以全表扫描的场景下,所有记录都会被加锁,也就是这条 update 语句产生了 4 个记录锁和 5 个间隙锁,相当于锁住了全表。

相关推荐
火山上的企鹅9 小时前
Codex实战:APP远程升级服务搭建(三)后台管理页面(APK 上传、版本管理、多应用页签)
服务器·网络·数据库·oracle·qgc
阿狸猿10 小时前
论 NoSQL 数据库技术及其应用
数据库·nosql
FBI HackerHarry浩10 小时前
DataGrip2023.2.3默认保存的数据库和.sql文件在哪里?怎么修改默认路径?
数据库
袁小皮皮不皮10 小时前
3.HCIP OSPF补充知识(优化版)
服务器·网络·数据库·网络协议·智能路由器
运筹vivo@10 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
志栋智能10 小时前
超自动化巡检:知识沉淀与团队协作的新载体
大数据·运维·网络·数据库·人工智能·自动化
syt_biancheng11 小时前
Redis初识
数据库·redis·缓存
cmes_love11 小时前
股票逐笔level2历史行情下载十档订单薄五档tick分钟下载分享
数据库·区块链
仙俊红11 小时前
SQL 调优需要掌握的知识
数据库·sql
fofantasy12 小时前
NSK LH12AN 微型导轨技术手册
运维·网络·数据库·经验分享·规格说明书