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 许可协议,转载请注明出处。