type
status
date
slug
summary
tags
category
icon
password
整理定义
锁定读(Locking Read)是InnoDB中用于控制并发访问的机制之一,确保数据的一致性和完整性。
锁定读(Locking Read),锁定读是指在读取数据时,InnoDB会对数据行施加锁定,以防止其他事务对这些数据进行修改。这是事务隔离级别和锁定策略的一部分,用于实现不同的一致性要求。
锁定读:一个在InnoDB表上执行锁定操作的SELECT语句。可以使用SELECT ... FOR UPDATE或SELECT ... LOCK IN SHARE MODE。根据事务的隔离级别,它有可能导致死锁。这是非锁定读(Non Lock Read)的相反操作。在只读事务中,全局表不允许使用此操作。在MySQL 8.0.1中,SELECT ... FOR SHARE取代了SELECT ... LOCK IN SHARE MODE,但为了向后兼容性,LOCK IN SHARE MODE仍然可用。
复述展开
分类
InnoDB中的锁定读主要有两种类型:
- 共享锁(Shared Locks):
- 允许一个事务读取一行数据。
- 其他事务可以读取相同的行,但不能修改它,直到锁被释放。
- 通常通过
SELECT ... LOCK IN SHARE MODE语句获得。
- 排他锁(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
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/industry-day83
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。













.png?table=block&id=0af3d43f-8aae-4c4a-b6c8-7266fccd6991&width=800&t=0aa172ae-180c-4cc6-b47f-3ccb84e7c8d8&cache=v2)







































