MySQL 的锁类型有哪些

数据库锁机制概述

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


一、全局锁

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

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

二、表级锁

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

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

三、行级锁

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

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

总结对比

锁类型 锁定粒度 开销 加锁速度 并发度 适用场景
全局锁 整个数据库 最低 全库备份
表级锁 整张表 DDL操作、数据迁移
行级锁 单行记录 高并发事务更新
相关推荐
APIshop2 小时前
微店关键词搜索商品列表 API 实战:micro.item_search 全流程指南
数据库
翔云1234562 小时前
在MySQL中,使用物理备份工具 xtrabackup备份扩容从库,从库上的gtid_executed和gtid_purged变化过程
数据库·mysql
liulilittle3 小时前
Linux shell 搜索指定后缀名文件,并复制到指定目录。
linux·服务器·数据库
必胜刻3 小时前
Redis哨兵模式(Linux)
linux·数据库·redis
dualven_in_csdn3 小时前
【数据库损坏】关于一次现场数据库损坏
数据库·mysql
锦衣夜行?4 小时前
oracle 未知长度从左到右截取某个字符串
数据库·oracle
han_hanker4 小时前
@JsonIgnore,@JsonProperty, @JsonInclude,@JsonFormat
数据库·oracle
hanyi_qwe4 小时前
MySQL事务基础
数据库·mysql
l1t4 小时前
三种用SQL解决Advent of Code 2022第8题 树顶木屋 的比较和分析
数据库·sql·oracle·duckdb·advent of code