MySQL 的锁类型有哪些

数据库锁机制概述

数据库锁主要根据其锁定的数据粒度,分为全局锁表级锁行级锁。粒度越细,并发能力通常越高,但管理开销也越大。


一、全局锁

定义:锁定整个数据库实例,使其处于只读状态。

  • 作用范围:数据库中的所有表。
  • 主要影响
    1. 加锁后,整个实例处于只读状态。
    2. 后续的DML写操作DDL语句 以及更新操作的事务提交都会被阻塞。
  • 典型使用场景:全库逻辑备份,确保备份数据的一致性。

二、表级锁

每次操作锁定整张表。其下主要分为两种:

1. 表锁
  • 特点:开销小,加锁快。
  • 缺点:并发度最低,锁冲突概率高。
2. 元数据锁
  • 特点:自动加锁,无需显式使用。
  • 作用:保证表结构(元数据)与查询操作的正确性,防止在查询过程中表结构被修改导致数据不一致。
  • 加锁规则
    • MDL读锁 :当对表进行增删改查(DML)操作时自动添加。读锁之间不互斥,允许多个线程同时对一张表进行DML操作。
    • MDL写锁:当对表进行结构变更(DDL,如加字段)操作时自动添加。
  • 锁互斥规则
    • 读锁与写锁互斥:一个线程在执行DML时,另一个线程不能修改表结构。
    • 写锁与写锁互斥:两个线程不能同时修改表结构,必须串行执行。

三、行级锁

定义:针对数据表中单行或多行记录的锁。

  • 作用场景:当多个事务需要更新同一行数据时,后发起的事务必须等待前一个事务释放该行的锁。
  • 特点
    • 优点:锁冲突概率最低,并发度最高。
    • 缺点:开销大,加锁慢。
  • 常见类型:记录锁、间隙锁、临键锁等。

总结对比

锁类型 锁定粒度 开销 加锁速度 并发度 适用场景
全局锁 整个数据库 最低 全库备份
表级锁 整张表 DDL操作、数据迁移
行级锁 单行记录 高并发事务更新
相关推荐
rising start6 小时前
二、全面理解MySQL架构
mysql·架构
星星也在雾里6 小时前
PgBouncer 解决 PostgreSQL 连接数超限 + 可视化监控
数据库·postgresql
bqq198610267 小时前
MySQL性能优化
mysql·mysql优化
雨辰AI8 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
长城20248 小时前
关于MySql的ONLY_FULL_GROUP_BY问题
数据库·mysql·聚合列
常常有8 小时前
MySQL 底层执行原理:输入SQL语句到两阶段提交
数据库·sql·mysql
Mr. zhihao9 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
m0_748839499 小时前
利用天正暖通CAD快速掌握风管数量统计的方法
数据库
随身数智备忘录9 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能
海市公约10 小时前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理