🗒️Day83【概念解析】 Locking Read
00 分钟
2023-12-13
2023-12-20
type
status
date
slug
summary
tags
category
icon
password

整理定义

💡
锁定读(Locking Read)是InnoDB中用于控制并发访问的机制之一,确保数据的一致性和完整性。
锁定读(Locking Read),锁定读是指在读取数据时,InnoDB会对数据行施加锁定,以防止其他事务对这些数据进行修改。这是事务隔离级别和锁定策略的一部分,用于实现不同的一致性要求。
锁定读:一个在InnoDB表上执行锁定操作的SELECT语句。可以使用SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE。根据事务的隔离级别,它有可能导致死锁。这是非锁定读(Non Lock Read)的相反操作。在只读事务中,全局表不允许使用此操作。
MySQL 8.0.1中,SELECT ... FOR SHARE取代了SELECT ... LOCK IN SHARE MODE,但为了向后兼容性,LOCK IN SHARE MODE仍然可用。

复述展开

分类

InnoDB中的锁定读主要有两种类型:
  1. 共享锁(Shared Locks):
      • 允许一个事务读取一行数据。
      • 其他事务可以读取相同的行,但不能修改它,直到锁被释放。
      • 通常通过SELECT ... LOCK IN SHARE MODE语句获得。
  1. 排他锁(Exclusive Locks):
      • 允许一个事务读取并修改一行数据。
      • 其他事务既不能读取也不能修改这行数据,直到锁被释放。
      • 通常通过SELECT ... FOR UPDATE语句获得。

例子

假设有一个账户表accounts,包含账户余额信息。如果你想要选中一个账户并更新其余额,你可能会这样做:
这里,SELECT ... FOR UPDATE语句对账户ID为1的行施加了排他锁,直到事务提交之前,其他任何事务都不能读取或修改这一行。

理解体会

锁定读(Locking Read)需要与一致性非锁定读(Consistent Read)对比起来学习。另外,这里也提到了共享锁与排他锁,也算是对之前的内容进行回顾了。
InnoDB的锁定读是事务处理中的一个重要特性,它允许数据库维护数据在并发环境下的一致性和完整性。通过共享锁和排他锁,InnoDB能够在保证数据安全的同时,提供高效的并发访问。正确使用锁定读取可以避免不必要的数据冲突和潜在的死锁,但也需要谨慎使用,因为不当的锁定策略可能会导致性能问题。

参考:

📌
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
 
上一篇
[杂谈]谈跑步
下一篇
Day82 【概念解析】Consistent Read

评论
Loading...