MYSQL的常见锁

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MYSQL的常见锁

MySQL 中的锁用于管理对数据库资源的并发访问,以保证数据的一致性和完整性。MySQL 提供了多种类型的锁,包括共享锁(Shared Lock)、排他锁(Exclusive Lock)和行级锁(Row-level Lock)等。

共享锁(Shared Lock

MySQL 中,共享锁(Shared Lock)是一种用于并发读取数据的锁。多个事务可以同时获取共享锁,并且共享锁之间不会互相阻塞。

当一个事务获取了共享锁后,其他事务仍然可以继续获取共享锁,但是不能获取排他锁。这意味着多个事务可以同时读取同一个数据,但是不能同时修改该数据。

共享锁在并发读取场景中非常有用,它可以提高并发性能,避免不必要的阻塞。例如,当多个事务需要读取同一数据集时,可以使用共享锁来确保数据的一致性。

MySQL 中,可以通过以下方式使用共享锁:

1.     SELECT 语句:在执行 SELECT 查询时,默认情况下,MySQL 会自动获取共享锁。这使得多个事务可以同时读取同一数据集。

例如:

SELECT*FROM table_name WHEREconditionFOR SHARE;

上述语句将会为查询结果的数据集获取共享锁。

2.     LOCK IN SHARE MODE:可以在 SELECT 语句末尾添加LOCK IN SHARE MODE子句,以显式地获取共享锁。

例如:

SELECT*FROM table_name WHEREcondition LOCK IN SHARE MODE;

上述语句将会为查询结果的数据集获取共享锁。

排他锁(Exclusive Lock

MySQL 中,排它锁(Exclusive Lock)是一种用于独占性访问数据的锁。只有一个事务可以持有排它锁,其他事务无法获取该锁。

排它锁主要用于写入或修改数据时,以防止其他事务同时读取或修改相同的数据。当一个事务持有排它锁时,其他事务不能获取共享锁或排它锁,从而确保数据的独占性。

MySQL 中,可以通过以下方式使用排它锁:

1.     SELECT ... FOR UPDATE:在执行 SELECT 查询时,可以添加FOR UPDATE子句来获取排它锁。

例如:

SELECT*FROM table_name WHEREconditionFORUPDATE;

上述语句将会为查询结果的数据集获取排它锁。

2.     INSERTUPDATE DELETE:在执行 INSERTUPDATE DELETE 操作时,MySQL 会自动为所涉及的数据行获取排它锁。这样可以确保在修改数据时,其他事务无法同时读取或修改相同的数据。

行级锁(Row-level Lock

行级锁是在共享锁和排他锁的基础上实现的,用于实现对数据表中单行或多行数据的并发访问控制。相对于表级锁或页级锁,行级锁更加细粒度,可以实现更高程度的并发性。

在行级锁的机制下,数据库管理系统会对每一行数据进行加锁,以确保同一时间只有一个事务可以对该行进行修改或读取。这样可以提高并发性能,避免了不必要的阻塞。

希望这篇文章对你有用,有什么问题欢迎积极提问!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
SQL 关系型数据库 MySQL
MySQL数据库进阶第五篇(锁)
MySQL数据库进阶第五篇(锁)
|
1月前
|
存储 SQL 关系型数据库
MYSQL--锁机制*
MYSQL--锁机制*
|
2月前
|
关系型数据库 MySQL 数据库
MySQL的行级锁锁的到底是什么?
本文简述了InnoDB的行级锁机制,包括记录锁、间隙锁和Next-Key锁。记录锁锁定索引记录,防止其他事务对相同值的行进行操作;间隙锁锁定索引记录间的间隙,防止插入。Next-Key锁是两者的结合,锁定记录及其前后间隙。在可重复读(RR)隔离级别下,加锁策略涉及Next-Key锁,但会因查询条件退化为行锁或间隙锁。MySQL的加锁机制遵循两个原则和两个优化,例如唯一索引等值查询时退化为行锁。RR级别虽能防止幻读,但也可能降低并发并引发死锁,因此有些场景下会选择读已提交(RC)级别。
MySQL的行级锁锁的到底是什么?
|
1月前
|
存储 SQL 关系型数据库
【MySQL技术内幕】6.3-InnoDB中的锁
【MySQL技术内幕】6.3-InnoDB中的锁
154 57
|
21天前
|
存储 关系型数据库 MySQL
深入浅出MySQL事务管理与锁机制
MySQL事务确保数据一致性,ACID特性包括原子性、一致性、隔离性和持久性。InnoDB引擎支持行锁、间隙锁和临键锁,提供四种隔离级别。通过示例展示了如何开启事务、设置隔离级别以及避免死锁。理解这些机制对优化并发性能和避免数据异常至关重要。【6月更文挑战第22天】
98 3
|
1月前
|
存储 关系型数据库 MySQL
深入研究MySQL意向锁
MySQL意向锁是一种特殊的表级锁,由InnoDB存储引擎在操作数据之前自动添加,无需用户干预。它分为意向共享锁(IS)和意向排他锁(IX)两种。意向锁的主要作用是协调行锁和表锁的关系,优化加锁策略,避免全表扫描判断是否存在行锁。意向锁之间不会冲突,但会与表级别的排他锁冲突,从而确保数据库并发访问的一致性和完整性。简而言之,意向锁提高了数据库并发操作的性能和效率。
156 5
|
1月前
|
存储 SQL 关系型数据库
【MySQL技术内幕】6.5-锁问题、阻塞、死锁、锁升级
【MySQL技术内幕】6.5-锁问题、阻塞、死锁、锁升级
53 2
|
1月前
|
SQL 存储 算法
【MySQL技术内幕】6.4-锁的算法
【MySQL技术内幕】6.4-锁的算法
34 1
|
19天前
|
SQL 存储 关系型数据库
Mysql-事务-锁-索引-sql优化-隔离级别
Mysql-事务-锁-索引-sql优化-隔离级别
|
24天前
|
SQL NoSQL 关系型数据库
Mysql锁及适用场景
Mysql锁及适用场景
29 0