MySQL 的锁类型有哪些

数据库锁机制概述

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


一、全局锁

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

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

二、表级锁

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

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

三、行级锁

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

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

总结对比

锁类型 锁定粒度 开销 加锁速度 并发度 适用场景
全局锁 整个数据库 最低 全库备份
表级锁 整张表 DDL操作、数据迁移
行级锁 单行记录 高并发事务更新
相关推荐
luoluoal2 分钟前
基于python的医疗问句中的实体识别算法的研究(源码+文档)
python·mysql·django·毕业设计·源码
数据知道8 分钟前
PostgreSQL 性能优化:连接数过多的原因分析与连接池方案
数据库·postgresql·性能优化
怣509 分钟前
MySQL子查询实战指南:数据操作(增删改查)与通用表达式
数据库·chrome·mysql
范纹杉想快点毕业12 分钟前
从单片机基础到程序框架:构建嵌入式系统的完整路径
数据库·mongodb
数据知道14 分钟前
PostgreSQL性能优化:如何定期清理无用索引以释放磁盘空间(索引膨胀监控)
数据库·postgresql·性能优化
喵叔哟15 分钟前
67.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--分摊功能总体设计与业务流程
数据库·微服务·架构
tryCbest16 分钟前
Oracle查看存储过程
数据库·oracle
咩咩不吃草22 分钟前
【MySQL】表和列、增删改查语句及数据类型约束详解
数据库·mysql·语法
不懒不懒22 分钟前
【MySQL 实战:从零搭建规范用户表(含完整 SQL 与避坑指南)】
数据库
ID_1800790547326 分钟前
Python结合淘宝关键词API进行商品价格监控与预警
服务器·数据库·python