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

MySQL--共享锁和排他锁

一. 引言:

想象图书馆借书场景:当你在阅览区看书时,其他人也可以一起阅读(共享),但管理员整理书架时会在旁边立个"整理中"的牌子禁止他人进入(排他)。这正是共享锁(Shared Lock)和排他锁(Exclusive Lock)的核心思想。

二. 基础概念

三. 共享锁

共享锁适用于那些不会改变现有数据状态的操作,比如查询语句SELECT ... LOCK IN SHARE MODE可以用来显式地请求获得一条或多条记录上的共享锁。这意味着在同一时间点上允许多个客户端同时持有相同的S锁并执行只读型的任务,从而提高了系统的并发处理能力。

四. 排他锁

相比之下,排他锁则更加严格——它不仅阻止其它X锁的存在同时也排斥所有的S锁。因此,只有当没有任何活动中的共享锁或其他形式更高级别的锁定存在于目标对象之上时,才能成功设置排他锁。这通常发生在UPDATE, DELETE这样的写入命令之前,通过语法如SELECT ... FOR UPDATE实现对特定行加X锁的功能。

五. 应用场景分析

  • 高并发读环境下的优化

    对于主要以读为主的业务逻辑来说,利用好共享锁能够极大提升性能表现。因为在这种情况下,大多数时候只需要保证读者之间互不影响即可满足需求,所以尽可能多地采用S锁而非X锁会减少不必要的等待现象发生。

  • 保护正在变更的数据项

    当涉及到更新或者删除某些敏感信息的时候,应该优先考虑使用排他锁。这样做可以在一定程度上避免脏读、不可重复读等问题的发生,进而保障交易过程的安全可靠。

-- 获取共享锁的例子 
START TRANSACTION; SELECT * FROM table_name WHERE id = 10 LOCK IN SHARE MODE; 
-- 获取排他锁的例子 
START TRANSACTION; SELECT * FROM table_name WHERE id = 10 FOR UPDATE;

思维导图


http://www.kler.cn/a/571916.html

相关文章:

  • AF3 block_diag函数解读
  • QTcpSocket使用指南与实践
  • Unity摄像机跟随物体
  • 2025年03月04日Github流行趋势
  • 深入理解 Android MediaCodec 视频编码
  • React进阶之前端业务Hooks库(六)
  • 遗传算法详解及在matlab中的使用
  • SSM记忆旅游网站
  • 基于 RBAC 的前端权限管理实现教程
  • ADB、Appium 和 大模型融合开展移动端自动化测试
  • 路由基础学习
  • 清华团队提出HistoCell,从组织学图像推断超分辨率细胞空间分布助力癌症研究|顶刊精析·25-03-02
  • 自由学习记录(40)
  • 基于微信小程序的停车场管理系统的设计与实现
  • Tomcat:Java Web应用的强大支撑
  • 05 HarmonyOS NEXT高效编程秘籍:Arkts函数调用与声明优化深度解析
  • 复合机器人为 CNC 毛坯件上下料注入 “智能强心针”
  • CentOS 7中安装Dify
  • Docker 容器的数据卷
  • LeetCode 42.接雨水