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

mysql都有哪些锁?

MySQL中的锁机制是确保数据库并发操作正确性和一致性的重要组成部分,根据锁的粒度、用途和特性,可以分为多种类型。以下是MySQL中常见的锁及其详细说明:


一、按锁的粒度划分

  1. 行级锁(Row-level Locks)

    • 描述:锁定表中的单行记录,允许多个事务同时访问表的不同行,提供高并发性。
    • 支持引擎:InnoDB(默认支持)。
    • 类型
      • 记录锁(Record Lock):直接锁定某一行,防止其他事务修改或删除。
      • 间隙锁(Gap Lock):锁定索引记录之间的间隙,防止新记录插入(用于防止幻读)。
      • 临键锁(Next-Key Lock):结合记录锁和间隙锁,锁定一个范围及其行(默认行锁实现方式)。
  2. 表级锁(Table-level Locks)

    • 描述:锁定整个表,事务访问表时需先获取锁,并发性较低。
    • 支持引擎:MyISAM、InnoDB(通过意向锁间接实现)。
    • 类型
      • 表共享读锁(S Lock):允许其他事务读表,但禁止写。
      • 表独占写锁(X Lock):禁止其他事务读写。
  3. 页级锁(Page-level Locks)

    • 描述:锁定数据页(一组连续的行),介于行锁和表锁之间。
    • 支持引擎:BDB(已弃用),InnoDB不直接使用。

二、按锁的性质划分

  1. 共享锁(Shared Lock, S Lock)

    • 行为:允许其他事务读同一数据,但禁止写。
    • 使用场景SELECT ... LOCK IN SHARE MODE
  2. 排他锁(Exclusive Lock, X Lock)

    • 行为:禁止其他事务读写数据。
    • 使用场景SELECT ... FOR UPDATE,数据修改(INSERT/UPDATE/DELETE)。
  3. 意向锁(Intention Locks)

    • 作用:协调不同粒度锁(如表锁与行锁)的冲突检测。
    • 类型
      • 意向共享锁(IS):事务打算在表的某些行上加共享锁。
      • 意向排他锁(IX):事务打算在表的某些行上加排他锁。

三、特殊用途锁

  1. 自增锁(Auto-inc Lock)

    • 作用:确保自增主键(AUTO_INCREMENT)的连续性和唯一性。
    • 特点:在插入操作时短暂持有,事务提交后释放。
  2. 元数据锁(Metadata Lock, MDL)

    • 作用:保护表结构(如ALTER TABLE)不被并发修改。
    • 行为:自动加锁,事务结束时释放。
  3. 全局锁(Global Lock)

    • 作用:锁定整个数据库实例,禁止所有写操作。
    • 使用场景:全库备份(FLUSH TABLES WITH READ LOCK)。

四、锁的兼容性

请求锁 \ 现有锁XIXSIS
X(排他锁)冲突冲突冲突冲突
IX(意向排他锁)冲突兼容冲突兼容
S(共享锁)冲突冲突兼容兼容
IS(意向共享锁)冲突兼容兼容兼容

五、锁与隔离级别

  1. 读未提交(Read Uncommitted):不加锁,通过脏读实现。
  2. 读已提交(Read Committed):使用记录锁,无间隙锁。
  3. 可重复读(Repeatable Read):默认使用临键锁(Next-Key Lock),防止幻读。
  4. 串行化(Serializable):所有读操作加共享锁,写操作加排他锁。

六、死锁处理

  • 检测机制:InnoDB通过等待图(Wait-for Graph)检测死锁。
  • 处理策略:强制回滚代价较小的事务,释放其锁资源。

七、监控与分析工具

  1. SHOW ENGINE INNODB STATUS:查看InnoDB引擎状态,包括锁信息。
  2. INFORMATION_SCHEMA
    • INNODB_TRX:当前运行的事务。
    • INNODB_LOCKS:当前持有的锁。
    • INNODB_LOCK_WAITS:锁等待关系。
  3. 性能模式(Performance Schema):监控锁的获取和释放。

你想要的我全都有:https://pan.q删掉憨子uark.cn/s/75a5a07b45a2

在这里插入图片描述

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

相关文章:

  • 历年北京理工大学保研上机真题
  • 分布式缓存:ZSET → MGET 跨槽(cross‐slot)/ 并发 GET解决思路
  • 第十九章:数据治理之数据指标(一):数据指标工具之【指标口径管理系统】与【指标数据查询系统】
  • AnyIOasyncio 现代化方法
  • Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
  • 李宏毅《机器学习2025》笔记 第二讲 —— AI Agent
  • Dubbo与OpenFeign的区别
  • Apache 高级配置实战:从连接保持到日志分析的完整指南
  • 用python实现中国象棋
  • Tool-Star新突破!RL赋能LLM多工具协同推理,性能全面超越基线方法
  • Linux的进程控制
  • 基于RedisBloom的JWT黑名单管理方案
  • 【2025】ubuntu22.04 docker安装全过程
  • Odoo 前端开发框架技术全面解析
  • Odoo: Owl Props 深度解析技术指南
  • Linux操作系统之进程(三):进程优先级与进程切换调度
  • npm幻影依赖问题
  • npm修改镜像的教程,将npm镜像修改为国内地址增加下载速度
  • SpringBoot-11-基于注解和XML方式的SpringBoot应用场景对比
  • 【微服务】SpringBoot 对接飞书审批流程使用详解
  • [Excel VBA]如何製作買三送一優惠條件的POS結帳介面?
  • 论文阅读笔记——Janus,Janus Pro
  • java高级 -Junit单元测试
  • JVM八股速查
  • MySQL的索引
  • leetcode2081. k 镜像数字的和-hard
  • 1.altium designer16 软件安装
  • 【短距离通信】【WiFi】WiFi7关键技术之4096-QAM、MRU
  • 深度图数据增强-形态学腐蚀操作
  • 历年哈尔滨工业大学(深圳)保研上机真题