MySQL 的锁,表级锁是哪一层的锁?行锁是哪一层的锁?

MySQL 的锁层级与类型

在 MySQL 中,锁的层级和实现与存储引擎密切相关。


1. 表级锁(Table-Level Locks)

(1)存储引擎层的表级锁
  • 实现层级存储引擎层(如 MyISAM、InnoDB)。
  • 特点
    • 粒度粗:锁定整张表,并发性能较低。
    • 适用场景:适合读多写少或全表操作(如 MyISAM 引擎的读/写锁)。
  • 示例
    • MyISAM 的表锁
      MyISAM 默认使用表级锁,分为 共享读锁(S锁)排他写锁(X锁)
      例如,执行 SELECT 时加读锁,INSERT/UPDATE 时加写锁。
    • InnoDB 的表锁
      InnoDB 在特定场景(如未命中索引的全表扫描)可能升级行锁为表级锁。
(2)Server 层的表级锁(元数据锁,MDL)
  • 实现层级Server 层
  • 特点
    • 隐式管理:由 MySQL Server 自动加锁,用于保护表结构(DDL 操作)。
    • 锁冲突 :DML(如 SELECT/INSERT)与 DDL(如 ALTER TABLE)会触发 MDL 锁冲突。
  • 示例
    执行 ALTER TABLE 时,MySQL Server 会加 MDL 写锁,阻塞其他会话的 DML 操作。

2. 行级锁(Row-Level Locks)

实现层级存储引擎层(仅 InnoDB 支持)。
  • 特点
    • 粒度细:仅锁定需要操作的行,并发性能高。
    • 支持事务:通过 MVCC(多版本并发控制)实现非锁定读。
  • 锁类型
    • 共享锁(S 锁):允许其他事务读,但禁止写。
    • 排他锁(X 锁):禁止其他事务读或写。
    • 间隙锁(Gap Lock):锁定索引记录间的间隙,防止幻读。
  • 示例
    执行 SELECT ... FOR UPDATE 时,InnoDB 会对符合条件的行加排他锁。

3. 对比表级锁与行级锁

特性 表级锁 行级锁
粒度 锁定整张表 锁定单行或多行
并发性能 低(锁冲突概率高) 高(锁冲突概率低)
存储引擎 MyISAM(默认)、InnoDB(特殊情况) InnoDB(默认支持)
适用场景 全表操作、读多写少 高并发写、事务隔离(如 RC/RR 级别)
实现层级 存储引擎层(MyISAM/InnoDB) + Server 层(MDL) 存储引擎层(仅 InnoDB)

4. 关键注意事项

  1. InnoDB 的锁升级

    • 当行锁数量过多或未命中索引时,InnoDB 可能将行锁升级为表级锁。
    • 示例:UPDATE table SET col=1 WHERE unindexed_col=10(全表扫描触发表锁)。
  2. 死锁风险

    • 行级锁可能引发死锁(如事务 A 锁行 1,事务 B 锁行 2,互相等待)。
    • InnoDB 会自动检测死锁并回滚代价较小的事务。
  3. 显式锁与隐式锁

    • 显式锁:通过 LOCK TABLESSELECT ... FOR UPDATE 手动加锁。
    • 隐式锁:由存储引擎自动管理(如 DML 语句触发的行锁)。

5. 总结

  • 表级锁
    • 存储引擎层:MyISAM 默认使用,InnoDB 在特殊场景下触发。
    • Server 层:元数据锁(MDL)保护表结构。
  • 行级锁
    • 仅 InnoDB 支持,通过 MVCC 和锁机制实现高并发事务。
    • 默认细粒度锁,避免全表锁定。
相关推荐
不愿透露姓名的大鹏10 分钟前
MySQL Binlog配置优化全攻略
运维·服务器·数据库·mysql·adb
柒.梧.16 分钟前
MySQL核心考点:存储引擎区别+视图详解
数据库·mysql·面试
电商API&Tina16 分钟前
跨境电商如何接入1688官方寻源通接口?附接入流程
java·数据库·python·sql·oracle·json·php
明月_清风25 分钟前
🚀 Flyway 存量数据库迁移:50张表一键导出清洗实战(附完整脚本)
数据库·后端
羊小蜜.33 分钟前
Mysql 08: 数据表基本操作——从创建到约束
数据库·mysql·数据表
程序员小郭8334 分钟前
MySQL分库分表策略全解析(实战版)
数据库·mysql·架构
卓怡学长36 分钟前
m320基于Java的网络音乐系统的设计与实现
java·数据库·spring·tomcat·maven
總鑽風1 小时前
数据一致性springcloud+rabbitmq+mysql+redis
mysql·spring cloud·rabbitmq
爱浦路 IPLOOK1 小时前
选对UPF网元供应商,解锁5G-A时代行业赋能新可能
运维·网络·数据库
墨神谕1 小时前
什么是回表查询
mysql