当前位置: 首页 > news >正文

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

文章目录

    • 锁的分类
    • 表锁和行锁的作用
    • MYSQL两个线程update语句同时处理一条语句,会不会有阻塞?
    • 如果2个范围不是主键或索引?还会阻塞吗?

锁的分类

  • 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 个间隙锁,相当于锁住了全表。

相关文章:

  • 商品中心—10.商品B端搜索系统的说明文档
  • 防御悬垂指针:C++的多维度安全实践指南
  • 逆向某物 App 登录接口:还原 newSign 算法全流程
  • Vulkan 学习(17)---- 使用 IndexBuffer
  • c#,vb.net LockObject ,多线程锁,多线程安全字典ConcurrentDictionary
  • C/C++数据结构之静态数组
  • Matplotlib入门指南:从安装到绘制基本图形
  • 3D制作角色模型的教程-1
  • Java的锁机制问题
  • 【论文阅读笔记】TransparentGS:当高斯溅射学会“看穿”玻璃,如何攻克透明物体重建难题?
  • Protobuf 与 JSON 的兼容性:技术选型的权衡与实践
  • 风险矩阵与灰色综合评价
  • [OS_26] 计算机系统安全 | CIA原则 | 侧信道攻击
  • 【工具】CrossAttOmics:基于交叉注意力的多组学数据整合技术
  • React纯函数和hooks原理
  • 一次性理解Java垃圾回收--简单直接方便面试时使用
  • 华为云Flexus+DeepSeek征文|在Dify-LLM平台中开发童话故事精灵工作流AI Agent
  • java中关于异步转同步的一些解决方案的对比与思考。【spring mvc堵塞式】
  • springboot企业级项目开发之项目测试——集成测试!
  • 【Java】HQL批量增删改
  • 昆山网站优化建设/新闻联播俄罗斯与乌克兰
  • 微动漫怎么制作/seo积分系统
  • 货运配载做网站/灰色行业关键词推广
  • 做报名链接的网站/郑州seo联系搜点网络效果好
  • 西宁网站建设有限公司/网站推广软件免费版大全
  • 做网赚类网站违法吗/关键字查找