Day83【概念解析】 Locking Read
行业概念

Day83【概念解析】 Locking Read

· 约 963 字 · 阅读约 5 分钟
目录

整理定义

💡 锁定读(Locking Read)是InnoDB中用于控制并发访问的机制之一,确保数据的一致性和完整性。

锁定读(Locking Read),锁定读是指在读取数据时,InnoDB会对数据行施加锁定,以防止其他事务对这些数据进行修改。这是事务隔离级别和锁定策略的一部分,用于实现不同的一致性要求。

锁定读:一个在InnoDB表上执行锁定操作的SELECT语句。可以使用SELECT … FOR UPDATE或SELECT … LOCK IN SHARE MODE。根据事务的隔离级别,它有可能导致死锁。这是非锁定读(Non Lock Read)的相反操作。在只读事务中,全局表不允许使用此操作。

复述展开

分类

InnoDB中的锁定读主要有两种类型:

  1. 共享锁(Shared Locks):

  2. 排他锁(Exclusive Locks):

例子

假设有一个账户表accounts,包含账户余额信息。如果你想要选中一个账户并更新其余额,你可能会这样做:

START TRANSACTION;
SELECT balance FROM accounts WHERE account_id = 1 FOR UPDATE;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
COMMIT;

这里,SELECT … FOR UPDATE语句对账户ID为1的行施加了排他锁,直到事务提交之前,其他任何事务都不能读取或修改这一行。

理解体会

锁定读(Locking Read)需要与一致性非锁定读(Consistent Read)对比起来学习。另外,这里也提到了共享锁与排他锁,也算是对之前的内容进行回顾了。

InnoDB的锁定读是事务处理中的一个重要特性,它允许数据库维护数据在并发环境下的一致性和完整性。通过共享锁和排他锁,InnoDB能够在保证数据安全的同时,提供高效的并发访问。正确使用锁定读取可以避免不必要的数据冲突和潜在的死锁,但也需要谨慎使用,因为不当的锁定策略可能会导致性能问题。

参考:

MySQL :: MySQL 8.0 Reference Manual :: 15.7.2.4 Locking Reads

相关文章