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 数据库的性能和稳定性。

相关推荐
乐观的Terry7 小时前
AI翻译助手-JWT与redis无状态认证
数据库·redis·缓存
胖头鱼的鱼缸(尹海文)7 小时前
胖头鱼的技术专栏-482 Oracle AI DB 23.26.4新特性一览(20261027)
数据库·人工智能·oracle
ss2737 小时前
PostgreSQL事务隔离级别与案例
数据库·postgresql
派小心.8 小时前
App数据统计平台怎么选?从SDK接入到日活留存看板的技术实现
数据库·人工智能·小程序
m0_639906948 小时前
MySQL 实现分布式锁:悲观锁、乐观锁、唯一索引锁
数据库·分布式·mysql
RuoyiOffice8 小时前
达梦 DM8 + openGauss:RuoYi Office 的 MySQL 数据转换与导入实践
数据库·spring boot·python·sql·信创
代码不停8 小时前
MyBatis操作数据库
数据库·mybatis
程序猿乐锅8 小时前
面向对象练习:图书借阅系统里的封装、抽象类与多态
开发语言·前端·数据库·后端·python·学习·1024程序员节
严同学正在努力8 小时前
PostgreSQL 高可用教程(流复制 + Patroni 生产级实战)
运维·数据库·ai·postgresql·架构
牧瀬クリスだ8 小时前
Redis String深度解析:从底层到五大实战场景
数据库·redis·缓存