【Mysql一本通-31】意向锁

次元: 365bet官网娱 时间戳: 2025-08-26 08:21:49 观察者: admin 访问量: 3886 能量值: 232
【Mysql一本通-31】意向锁

意向锁 (Intention Lock)

意向锁 (Intention Lock) 是一种在数据库管理系统中用于解决 行级锁 和 表级锁 冲突的锁机制。它主要用于 InnoDB 存储引擎,目的是为了在事务操作时提前声明自己将要对某个行进行加锁,从而避免行级锁和表级锁之间的冲突。

意向锁是一种 表级锁,其作用是明确标示一个事务将要对某些行加锁,而不直接对这些行加锁。这种机制能够提高并发性并确保事务的隔离性。

意向锁的类型

意向共享锁 (IS Lock, Intention Shared Lock):

当事务打算对某一行加 共享锁 时,它首先在表级加一个 意向共享锁。其他事务可以在表级加意向共享锁,但不能加意向排他锁(因为共享锁不会修改数据)。意向排他锁 (IX Lock, Intention Exclusive Lock):

当事务打算对某一行加 排他锁 时,它首先在表级加一个 意向排他锁。意向排他锁意味着事务将在行级上加排他锁,其他事务不能在该行上加意向共享锁或意向排他锁。意向锁的工作原理

对行加锁的意图声明:当事务想要对表中的某些行加共享锁或排他锁时,它会先在表上加一个意向锁。意向锁是为了告诉数据库系统,该事务在某个表中的某些行将加锁。

避免冲突:意向锁允许多个事务在表级别加锁而不相互冲突。这样,当多个事务在表级加意向锁时,数据库能保证,如果其中某个事务最终在行级上加锁(如加共享锁或排他锁),不会发生与其他事务冲突的情况。

意向锁的示例

假设我们有一个 accounts 表,其中包含多个账户记录。我们希望一个事务读取数据,而另一个事务可能想要修改某些行的数据。

步骤:

事务 A 打算查询表中所有账户的数据,它会在表级加一个 意向共享锁 (IS)。事务 B 打算更新某个账户的余额,它会在表级加一个 意向排他锁 (IX),然后在某一行上加排他锁。这种情况下,意向锁确保了行级锁和表级锁之间不会发生冲突。

示例 SQL 操作:

意向共享锁 (IS):事务 A 在查询表时加意向共享锁。START TRANSACTION;

-- 事务 A:意向共享锁

SELECT * FROM accounts WHERE balance > 1000 LOCK IN SHARE MODE;

-- 事务 A 已加意向共享锁,允许读取数据

意向排他锁 (IX):事务 B 在修改某个账户余额时加意向排他锁。START TRANSACTION;

-- 事务 B:意向排他锁

UPDATE accounts SET balance = balance + 100 WHERE account_id = 1 FOR UPDATE;

-- 事务 B 在行级上加排他锁,同时在表级上加意向排他锁

意向锁的作用与优点

行级锁与表级锁冲突的解决:

在使用 行级锁 时,如果多个事务需要对同一张表中的行加锁,可能会引发性能问题或死锁。意向锁通过在表级上加锁,解决了这一问题。它避免了多个事务在表级加锁时发生冲突,从而确保了 行级锁 和 表级锁 的协调。

提升性能:

意向锁避免了对每一行加锁的额外开销,允许多个事务对同一张表加锁而不发生冲突。通过事先声明锁的意图,数据库系统可以有效地进行锁的管理,减少了锁争用,提高了系统的并发性。

防止死锁:

意向锁通过先在表级别加锁来声明锁意图,避免了多个事务在表级和行级加锁时的冲突,从而减少了死锁的可能性。

支持并发操作:

意向锁使得事务在修改数据时,能够提前通知数据库自己将在某行上加锁。这样,其他事务可以知道某个行正在被修改,避免了过多的加锁竞争,保证了系统的并发操作能力。意向锁与其他锁的兼容性

意向锁的一个重要特点是它与其他锁(如共享锁和排他锁)具有一定的兼容性和互斥性:

锁类型/兼容性意向共享锁 (IS)意向排他锁 (IX)共享锁 (S)排他锁 (X)意向共享锁 (IS)兼容不兼容兼容不兼容意向排他锁 (IX)不兼容兼容不兼容不兼容共享锁 (S)兼容不兼容兼容不兼容排他锁 (X)不兼容不兼容不兼容不兼容意向共享锁 (IS) 与 共享锁 (S) 可以兼容,即多个事务可以对同一数据加共享锁,但不能加排他锁。意向排他锁 (IX) 与 排他锁 (X) 是互斥的,即一个事务加了排他锁时,不能有其他事务加意向排他锁。总结

意向锁 是一种表级锁,用于在行级锁操作之前声明一个事务将对某行加锁的意图,从而避免行级锁与表级锁的冲突。意向共享锁 (IS) 用于表示事务打算对某行加共享锁,允许多个事务并发读取数据。意向排他锁 (IX) 用于表示事务打算对某行加排他锁,避免其他事务对该行进行修改。意向锁 提高了数据库的并发性和性能,解决了行级锁和表级锁冲突的问题,并减少了死锁的可能性。意向锁是一种高效的锁机制,特别适用于支持 行级锁 的数据库系统,能够在多事务并发访问的环境下有效地管理锁,提高系统的并发性和数据一致性。

相关维度

大师列传

大师列传

餐厅预定app有哪些? 餐厅预订app推荐

餐厅预定app有哪些? 餐厅预订app推荐

iPhone 销量大跌,降价促销,苹果为何不香了?

iPhone 销量大跌,降价促销,苹果为何不香了?

如何查询京东账单?

如何查询京东账单?