MySQL中有哪几种锁?

MySQL 支持多种类型的锁,用于控制对数据的并发访问,以避免并发事务中的问题。以下是 MySQL 中常用的几种锁:

1. 表级锁(Table Locks)

表级锁是最简单的锁类型,它作用于整个表。MyISAM 和 InnoDB 存储引擎都支持表级锁。

MyISAM 表锁:MyISAM 存储引擎使用表锁,它会在读取表时锁定整个表,在读取过程中阻止其他事务对表的修改操作。MyISAM 支持读写锁,但只允许一个事务在同一时间修改表。
InnoDB 表锁:InnoDB 存储引擎也支持表级锁,但在大部分情况下,InnoDB 默认使用行级锁,只有在特定情况下才会使用表级锁。

2. 行级锁(Row Locks)

行级锁是最细粒度的锁类型,它作用于表中的单个行。InnoDB 存储引擎支持行级锁,这是 InnoDB 相比 MyISAM 的一大优势。

InnoDB 行锁:InnoDB 存储引擎使用行锁来提高多行操作的并发性。行锁可以确保同一时刻只有一个事务可以更新或删除特定行,而其他事务可以同时读取同一行。

3. 页级锁(Page Locks)

页级锁是介于表级锁和行级锁之间的锁类型,它作用于表中的一个或多个页。InnoDB 存储引擎支持页级锁。

InnoDB 页锁:InnoDB 存储引擎使用页锁来提高多页操作的并发性。当一个事务修改数据时,它可能会锁定整个页,以防止其他事务对该页中的其他行进行修改。

4. 意向锁(Intention Locks)

意向锁是一种特殊的表级锁,它用于标记一个事务是否打算在某个范围内对行进行读取或修改。InnoDB 存储引擎支持意向锁。

InnoDB 意向锁:意向锁可以确保一个事务不会与其他事务发生冲突。当一个事务想要在某个范围内对行进行读取或修改时,它会先获取该范围的意向锁。

5. 排他锁(Exclusive Locks)

**排他锁也称为 X 锁,它确保一个事务可以独占性地访问数据。**当一个事务持有排他锁时,其他事务不能读取或修改该数据。InnoDB 存储引擎支持排他锁。

InnoDB 排他锁:排他锁是 InnoDB 存储引擎中最严格的锁类型。当一个事务持有排他锁时,其他事务不能读取或修改被锁定的数据。

6. 共享锁(Shared Locks)

共享锁也称为 S 锁,它允许多个事务同时读取数据,但不能修改。InnoDB 存储引擎支持共享锁。

InnoDB 共享锁:共享锁允许多个事务同时读取数据,这有助于提高多读操作的并发性。当一个事务持有共享锁时,其他事务也可以获取共享锁,但它们不能获取排他锁。

通过合理地使用这些锁类型,可以有效地控制并发事务,避免并发事务带来的问题,从而提高 MySQL 数据库的性能和稳定性。

相关推荐
Summer-Bright19 分钟前
深度 | 壁仞1.74亿中标智算中心:国产GPU从能用跨进商用,但4.5亿的大单却因凑不齐三家废标了
数据库·ai·国产gpu
云安全助手25 分钟前
自建接入VS聚合平台:企业 AI 调用的选型思路与迁移成本拆解
java·大数据·数据库·人工智能·ai大模型
白露与泡影41 分钟前
Redis 的“单线程”与“多线程”:一场关于性能与简洁的权衡
数据库·redis·php
白起那么早1 小时前
idea 插件-把数据库的表画出来
数据库·后端·intellij idea
fengkai45451 小时前
十一、MySQL 第 1‑3 章
运维·数据库·mysql
Lancker2 小时前
记一次 Druid 连接 MySQL 报 Communications link failure 的排查过程
数据库·mysql·adb
自强的小白2 小时前
mybatis_plus的核心功能(条件构造器)
mysql
adinnet20262 小时前
多轮对话与上下文压缩:追问时模型怎么记住前面说的
数据库·microsoft
JosieBook2 小时前
【数据库】MySQL 实战精通系列 · 第11篇:Redis 缓存与 MySQL 一致性实战
数据库·mysql·缓存
Leo.yuan3 小时前
2026企业级数据集成平台市场报告:国内外厂商格局与技术路线
数据库·oracle