MySQL 的锁类型有哪些

数据库锁机制概述

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


一、全局锁

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

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

二、表级锁

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

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

三、行级锁

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

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

总结对比

锁类型 锁定粒度 开销 加锁速度 并发度 适用场景
全局锁 整个数据库 最低 全库备份
表级锁 整张表 DDL操作、数据迁移
行级锁 单行记录 高并发事务更新
相关推荐
荒川之神12 分钟前
Oracle 数据仓库星座模型(Galaxy Model)设计原则
数据库·数据仓库·oracle
杰克尼13 分钟前
redis(day03-商户查询缓存)
数据库·redis·缓存
枕布响丸辣14 分钟前
Python 操作 MySQL 数据库从入门到精通
数据库·python·mysql
zxrhhm34 分钟前
SQLServer限制特定数据库的CPU使用率,确保关键业务系统有足够的资源
数据库·sqlserver
刘~浪地球1 小时前
Redis 从入门到精通(十三):哨兵与集群
数据库·redis·缓存
Java开发追求者1 小时前
windows卸载mysql教程
mysql·mysql卸载
dyyshb1 小时前
PostgreSQL 终极兜底方案
数据库·postgresql
他们叫我技术总监2 小时前
零依赖!FineReport11 快速对接 TDengine 数据库:从驱动部署到报表实现
大数据·数据库·ai·tdengine
TDengine (老段)2 小时前
TDengine IDMP 可视化 —— 定时报告
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
曹牧2 小时前
Oracle:
数据库·oracle