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

MySQL中有哪些锁

一、按锁粒度分类

1. 全局锁

作用于整个数据库实例,保障全库操作一致性。

(1) FTWRL(Flush Tables with Read Lock)

  • 作用:刷新所有表到磁盘,并使非 SUPER 权限会话进入只读状态

  • 场景:全库逻辑备份(如 mysqldump --lock-all-tables)

  • 注意:持有期间阻塞所有 DML 和 DDL,长时间持有会导致业务阻塞

(2) LOCK INSTANCE FOR BACKUP(MySQL 8.0+)

  • 目标:为物理备份提供更温和的全局锁

  • 特点:允许普通业务读写,仅阻止破坏性操作(如实例关闭、表结构变更等)

  • 优势:相比 FTWRL,对业务影响更小

2. 表级锁

(1) 表锁(Table Lock)

  • 读锁:允许多线程读,阻止所有写操作

  • 写锁:独占整张表,阻止其他所有读写操作

  • 限制:持有表锁时会话只能访问被锁表

(2) 元数据锁(MDL)

  • 作用:自动加锁,保证 DDL 与 DML 操作互斥

  • 读锁:由 SELECT 等读操作触发,可共存

  • 写锁:由 ALTER 等 DDL 操作触发,与任何锁互斥

  • 注意:MDL 在事务结束时释放,长事务会阻塞 DDL

(3) 意向锁

  • 目的:协调表级锁与行级锁,提升检测效率

  • IS 锁:由 SELECT...LOCK IN SHARE MODE 触发,表明意图加行级 S 锁

  • IX 锁:由 DML 语句触发,表明意图加行级 X 锁

  • 兼容性:IS 与 IX 可共存,与表读锁兼容,与表写锁互斥

3. 行级锁

作用于单行或多行记录,依赖索引实现。

(1) 记录锁(Record Lock)

  • 锁定单条索引记录

  • 无索引时退化为表锁

  • 事务提交时释放

(2) 间隙锁(Gap Lock)

  • 锁定索引记录间的间隙

  • 仅 RR 隔离级别下生效,防止幻读

  • 允许多个事务持有同一间隙锁

(3) Next-Key Lock

  • 记录锁 + 间隙锁,RR 级别默认行锁模式

  • 锁定左开右闭区间

  • 唯一索引精确匹配时退化为记录锁

(4) 插入意向锁

  • 特殊的间隙锁,INSERT 操作时触发

  • 允许不同位置的并发插入,同一位置插入互斥

二、按功能分类

1. 共享锁(S 锁)

  • 获取方式SELECT...LOCK IN SHARE MODE

  • 特性:允许多事务共享读,阻塞写操作

  • 兼容性:与 S 锁兼容,与 X 锁互斥

2. 排他锁(X 锁)

  • 获取方式SELECT...FOR UPDATE 及 DML 语句

  • 特性:独占资源,阻塞其他所有锁请求

  • 兼容性:与 S 锁和 X 锁均互斥

http://www.xdnf.cn/news/1475515.html

相关文章:

  • MathJax - LaTeX:WordPress 公式精准呈现方案
  • Android Studio 构建变体中的资源选择顺序详解
  • UDP-Server(2)词典功能
  • git在Linux中的使用
  • mac-intel操作系统go-stock项目(股票分析工具)安装与配置指南
  • v0.29.3 敏感词性能优化之繁简体转换 opencc4j 优化
  • 大语言模型提示词工程详尽实战指南
  • 记一次uniapp+nutui-uniapp搭建项目
  • 计算机网络:无线局域网加密与认证方式
  • LeetCode算法日记 - Day 33: 最长公共前缀、最长回文子串
  • Linux | i.MX6ULL Tftp 烧写和 Nfs 启动(第十九章)
  • Paimon——官网阅读:文件系统
  • 1.5、机器学习-回归算法
  • Oracle体系结构-Redo Log Buffer详解
  • Day22_【机器学习—集成学习(3)—Boosting—Adaboost算法】
  • FreeMarker快速入门指南
  • Lua 面向对象编程
  • 【MFC】对话框节点属性:Language(语言)
  • macOS下arm编译缺少stdint.h等问题
  • Python入门:从Hello World到项目创建
  • MySQL与ES索引区别
  • 【LeetCode热题100道笔记】二叉树的右视图
  • 数据结构中排序的时间、空间复杂度以及稳定性
  • 20250906-01:开始创建LangChain的第一个项目
  • 虚拟化技术
  • 文件I/O与I/O多路复用
  • 外置flash提示音打包脚本
  • 版本发布流程手册:Release分支规范与Bug分级标准全解析
  • [C++刷怪笼]:搜索二叉树--便利的查找工具
  • 【数据库相关】TxSQL新增数据库节点步骤