MySQL 中有哪些锁类型?

在 MySQL 中,锁是用于管理并发访问的机制,以保证数据一致性和完整性。MySQL 支持多种类型的锁,按照其粒度和用途可以分为以下几类。


1. 按粒度分类

表锁(Table Lock)

  • 定义:表锁是一种锁住整个表的机制,锁定后其他事务无法对该表进行任何操作,直到锁释放为止。
  • 特性
    • 粒度大,开销小,容易引发锁争用。
    • 适用于查询较多且修改较少的场景。
  • 分类
    • 读锁(共享锁):多个事务可以同时读取表,但不能写入。
    • 写锁(排他锁):一个事务对表进行写操作时,其他事务无法进行读或写操作。
  • 语法
LOCK TABLES table_name READ/WRITE; UNLOCK TABLES;

行锁(Row Lock)

  • 定义:行锁是一种锁住单行数据的机制,仅对某些行进行加锁,允许其他事务操作未加锁的行。
  • 特性
  • 粒度小,并发性高,锁争用少。
  • 开销大,因为需要更精细的管理。
  • 适用范围
  • 主要用于 InnoDB 引擎,支持行级锁。
  • 行锁是在索引基础上实现的,未使用索引的查询会锁全表。

2. 按用途分类

共享锁(S 锁 / Shared Lock)

  • 定义:允许事务读取一行数据,多个事务可以同时获得共享锁。
  • 特性
  • 防止其他事务对该数据进行修改。
  • 使用方法
SELECT ... LOCK IN SHARE MODE;

排他锁(X 锁 / Exclusive Lock)

  • 定义:允许事务对数据进行修改,其他事务无法同时获得该数据的锁。
  • 特性
  • 防止其他事务读取或修改数据。
  • 使用方法
SELECT ... FOR UPDATE;

3. 按锁实现机制分类

意向锁(Intent Lock)

  • 定义:意向锁用于表示事务打算在表级别或行级别加锁,用于加速锁冲突检测。
  • 类型
  • 意向共享锁(IS):事务打算对某些行加共享锁。
  • 意向排他锁(IX):事务打算对某些行加排他锁。
  • 特性
  • 提高锁定操作的效率。
  • 仅用于内部管理,用户无法直接使用。

记录锁(Record Lock)

  • 定义:锁住索引中的单个记录(行),用于精确控制某一行数据的并发访问。
  • 特性
  • 避免同一行的并发修改。

间隙锁(Gap Lock)

  • 定义:锁住索引记录之间的间隙,防止其他事务在间隙内插入新记录。
  • 特性
  • 防止幻读。
  • 只在事务隔离级别为 可重复读(Repeatable Read) 时使用。

下一键锁(Next-Key Lock)

  • 定义:结合了 记录锁间隙锁,锁住某条记录及其周围的间隙。
  • 特性
  • 防止其他事务修改或插入记录,解决幻读问题。
  • 默认情况下,InnoDB 使用下一键锁。

4. 特殊锁类型

自增锁(AUTO-INC Lock)

  • 定义:针对含有自增列的表的锁,用于保证自增值的唯一性。
  • 特性
  • 锁粒度小,适用于单个事务。
  • 当自增列操作完成后立即释放。

MDL 锁(Metadata Lock)

  • 定义:元数据锁用于保护表的结构(如表定义、索引结构)不被其他事务更改。
  • 特性
  • 在 DDL 操作(如 ALTER TABLE)期间加锁,防止表被其他事务访问。
  • 自动加锁,无需用户干预。

总结

锁类型 粒度 特性 适用场景
表锁 粗粒度 性能高,但并发性差 查询多、写入少的场景
行锁 细粒度 并发性高,但开销大 高并发场景,数据访问量大的场景
共享锁(S 锁) 行/表级 允许读取,禁止写入 只读查询
排他锁(X 锁) 行/表级 允许写入,禁止其他操作 数据修改
间隙锁 索引间隙 防止幻读 隔离级别为可重复读的场景
下一键锁 行+间隙 解决幻读问题 InnoDB 的默认锁机制
自增锁 自增值控制 确保自增列的唯一性 插入含自增列的表
MDL 锁 表元数据 防止表结构被并发修改 DDL 操作

锁的选择取决于实际场景和需求,合理使用锁机制可以在提高性能的同时保证数据一致性。

MySQL 中有哪些锁类型?的更多相关文章

  1. MySQL数据库的锁详解【转】

    当然在我们的数据库中也有锁用来控制资源的并发访问,这也是数据库和文件系统的区别之一. 为什么要懂数据库锁? 通常来说对于一般的开发人员,在使用数据库的时候一般懂点 DQL(select),DML(in ...

  2. 面试中的老大难-mysql事务和锁,一次性讲清楚!

    众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点.本文会详细介绍事务和锁的相关概念及其实现原理,相信大家看完之后,一定会对事务和锁有更加深入的理解. 本文主要内容是根据掘金小册& ...

  3. mysql锁类型

    mysql锁类型 问题 都有哪些锁 锁与隔离级别的关系 sql语句中涉及都涉及哪些锁 事务中,锁何时释放 死锁检测机制 概要

  4. MySQL 中的锁有哪些类型,MySQL 中加锁的原则

    MySQL 中的锁理解 锁的类型 全局锁 缺点 适用范围 表级锁 表锁 元数据锁 意向锁 自增锁 行锁 Record Lock Gap Lock Next-Key Lock 插入意向锁 加锁的原则 1 ...

  5. MySQL锁类型以及子查询锁表问题、解锁

    MySQL中select * for update锁表的范围 MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主 ...

  6. MySQL中的锁(表锁、行锁)

    锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...

  7. MySQL行级锁,表级锁,页级锁详解

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  8. MySQL行级锁、表级锁、页级锁详细介绍

    原文链接:http://www.jb51.net/article/50047.htm 页级:引擎 BDB.表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行行级:引擎 INNODB , ...

  9. 谈谈MySQL数据表的类型(转)

    谈谈MySQL数据表的类型 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其 ...

  10. MySQL事务与锁

    MySQL事务与锁 锁的基本概念 锁是计算机协调多个进程或线程并发访问某一资源的机制. 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISA ...

随机推荐

  1. 重试机制与 CompletableFuture 拓展

    重试机制与 CompletableFuture 拓展 禁止转载. 本文旨在讨论重试机制的特点和策略,分析常用重试类库的实现,讨论为 CompletableFuture 添加重试机制的方法.文章首发同名 ...

  2. 一种面向混合云平台基于LSTM预测模型的资源池配额方法。

    本文分享自天翼云开发者社区<一种面向混合云平台基于LSTM预测模型的资源池配额方法.>,作者:l****n 基于用户的历史配额申请情况和实际资源使用情况组成数据集搭建LSTM时序预测模型. ...

  3. 云安全CIA:关键信息保证的三大支柱

    本文分享自天翼云开发者社区<云安全CIA:关键信息保证的三大支柱>,作者:每日知识小分享 随着云计算的迅速普及,云安全问题越来越受到关注.云安全涉及的范围广泛,涵盖了云端数据中心的物理安全 ...

  4. 理解ID3决策树

    决策树是一个树形结构,类似下面这样: 上图除了根节点外,有三个叶子节点和一个非叶子节点. 在解决分类问题的决策树中,叶子节点就表示所有的分类,比如这里的分类就有3种:无聊时阅读的邮件.需及时处理的邮件 ...

  5. tomcat启动时启动窗口出现乱码的解决方案

    工具/原料   一台安装了tomcat的电脑 方法/步骤     先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却 ...

  6. Typecho 引入 DPlayer

    想在文章中插入视频,尝试 iframe 和 video 标签后发现 m3u8 流会触发下载无法播放,用 hls 该问题后,碰到了 403 forbbiden.联想到前些天新浪图床加 referrer ...

  7. Spark - [03] 资源调度模式

    题记部分 一.Local模式 1.1.概述 Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试的. 可以通过以下几种方式设置Master (1)local:所欲计算都运行在一个 ...

  8. Hive - [02] 安装部署

    一.相关链接地址 Hive官网:https://hive.apache.org/ Hive下载页面:https://downloads.apache.org/hive/ 中科大镜像地址:http:// ...

  9. HttpClient 进行soap请求

    当你在使用C#的HttpClient进行SOAP请求时,确保你的代码类似于以下示例: using System; using System.Net.Http; using System.Text; u ...

  10. C#之 Dictionary 详解

    基本概念 Dictionary<TKey, TValue>是C#中用于存储键值对集合的泛型类,属于System.Collections.Generic命名空间.它允许使用键(Key)来访问 ...