MySQL 中有哪些锁类型?
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 中有哪些锁类型?的更多相关文章
- MySQL数据库的锁详解【转】
当然在我们的数据库中也有锁用来控制资源的并发访问,这也是数据库和文件系统的区别之一. 为什么要懂数据库锁? 通常来说对于一般的开发人员,在使用数据库的时候一般懂点 DQL(select),DML(in ...
- 面试中的老大难-mysql事务和锁,一次性讲清楚!
众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点.本文会详细介绍事务和锁的相关概念及其实现原理,相信大家看完之后,一定会对事务和锁有更加深入的理解. 本文主要内容是根据掘金小册& ...
- mysql锁类型
mysql锁类型 问题 都有哪些锁 锁与隔离级别的关系 sql语句中涉及都涉及哪些锁 事务中,锁何时释放 死锁检测机制 概要
- MySQL 中的锁有哪些类型,MySQL 中加锁的原则
MySQL 中的锁理解 锁的类型 全局锁 缺点 适用范围 表级锁 表锁 元数据锁 意向锁 自增锁 行锁 Record Lock Gap Lock Next-Key Lock 插入意向锁 加锁的原则 1 ...
- MySQL锁类型以及子查询锁表问题、解锁
MySQL中select * for update锁表的范围 MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主 ...
- MySQL中的锁(表锁、行锁)
锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...
- MySQL行级锁,表级锁,页级锁详解
页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...
- MySQL行级锁、表级锁、页级锁详细介绍
原文链接:http://www.jb51.net/article/50047.htm 页级:引擎 BDB.表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行行级:引擎 INNODB , ...
- 谈谈MySQL数据表的类型(转)
谈谈MySQL数据表的类型 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其 ...
- MySQL事务与锁
MySQL事务与锁 锁的基本概念 锁是计算机协调多个进程或线程并发访问某一资源的机制. 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISA ...
随机推荐
- Golang sync.pool源码解析
Golang sync.pool源码解析 - sync.pool - 是什么 - 怎么用 - demo - 真实世界的使用 - 源码解读-数据结构 - 源码解读-读写流程 - 写流程 - 读流程 - ...
- gitblit 安装
github 私有代码库收费属于正常商业操作,毕竟现在鼓励开源,但是受到美国出口管制,这就有些不妙了. 所以有必要自己搭建一个私有的托管服务,经过比较并且,选择了gitblit(因为最近偶尔搞搞jav ...
- 生成对抗网络GAN简介
本文分享自天翼云开发者社区<生成对抗网络GAN简介>,作者:王****青 生成对抗网络(Generative Adversarial Networks,GAN)是一种深度敏感词模型,用于生 ...
- SNMP简介
复习几组概念带内管理和带外管理区别:传送的物理通道不同.1.带内管理是管理控制信息与数据信息使用统一物理通道进行传送.当网络出现故障中断时数据传输和管理都无法正常进行.2.带外管理在于通过不同的物理通 ...
- 什么是OpenStack?
OpenStack是一个云平台管理的项目,它不是一个软件,它是由几个主要的组件组合起来,为公有云.私有云和混合云的建设与管理提供软件的开源项目.现在已经有来自100多个国家的数万名个人和200多家企业 ...
- JAVA基础环境配置指南(简洁版)
1.安装JDK 官网下载后直接安装 配置环境变量: 添加 JAVA_HOME 变量名:JAVA_HOME 变量值:C:\Program Files (x86)\Java\jdk1.8.0_91 // ...
- 【忍者算法】从入环点到相遇点:深入理解环形链表 II|LeetCode第142题 环形链表 II
[忍者算法]从入环点到相遇点:深入理解环形链表 II|LeetCode第142题 问题升级:不止要找环,还要找入环点 在上一题中,我们讨论了如何判断链表是否有环.现在让我们更进一步:如果确定链表中有环 ...
- 使用Visual Studio 调式NDK so 库时,调试工具无法显示vector内容
最近在研究C++开发安卓端so库,demo使用xamarin.android作为载体来验证算法库文件的准确性.调试过程中发现vector中的内容无法显示集合详细.如下图 研究了半天(参考链接2.3), ...
- 洋葱学园:开启高效学习之旅的宝藏 APP 40天会员5元到手价
洋葱学园是一款在在线教育领域表现出色的教学 APP ,下面为您详细介绍它的特点以及推荐理由. 丰富的学科覆盖: 洋葱学园涵盖了从小学到高中的全学科课程,包括数学.语文.英语.物理.化学等.无论您处于哪 ...
- 百万架构师第四十四课:Nginx:Nginx 的扩展-OpenRestry|JavaGuide
百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 公众号:不止极客 Nginx 的扩展-OpenRestry 课程目标 Nginx 进程模型简介 Nginx 的高 ...