14.5.1 Innodb 的锁

来源:这里教程网 时间:2026-03-01 15:25:31 作者:

14.5.1 Innodb Locking 此节会介绍Innodb中的锁的类型。

Shared and Exclusive 锁

Intention 锁

Record 锁

Gap 锁

Next-Key 锁

Insert Intention 锁

AUTO-INC 锁

Predicate Locks for Spatial Indexes

Shared and Exclusive 锁Innodb 支持标准的行级锁,shared(S) 锁和exclusive(X) 锁。

shared(S) 锁允许事务在一行上持有共享锁进行读取操作。

exclusive(X) 锁允许事务在一行上持有排他锁进行update和delete操作。

如果事务T1在行r上持有shared(S)锁,事务T2在行r上的锁请求有下面两种情况:

事务T2的S 锁请求会被立即赋予, T1和T2 在行r上都会持有S锁。

事务T2的X 锁请求不会立即赋予。

如果事务T1 在行r上持有exclusive(X)锁,事务T2对行r的任何请求都不会被赋予,并且事务T2不得不等待事务T1 释放行r上的锁。 Intention 锁Innodb 支持多个粒度锁定,允许行锁和表锁共存。 为了实现多个粒度级别的锁定,innodb使用意向所。 意向锁是表级锁,指示事务稍后对表中的行所需的锁定类型(shared 或 exclusive)。在Innodb 引擎中有两种意向锁(比如事务T 在表t上请求锁):

Intention shared(IS):   事务T试图在表t的行上持有S锁。

Intention exclusive(IX):  事务T试图设置X 锁。

例如: select ... lock in share mode 会设置IS锁, select ... for update 会设置IX锁。 意向锁遵循下面的规则:

在事务想在表t上获取S 锁前,必须先获取IS锁或级别更高的锁。

在事务想在行上获取X锁,必须现在表t上获取IX锁。

下面是锁的兼容矩阵: 事务在请求锁时如果与已经存在的锁兼容,锁立刻会被赋予,如果不兼容则需要等待,直到持有的锁释放。意向锁不会阻塞全表扫描外的任何请求(比如:lock tables ... write). IX和IS 锁的主要目的是为了显示正在锁住一行,或准备锁住一行。 意向锁可以通过show engine innodb status\G; 命令去查看,比如:TABLE LOCK table 'test'.'t' trx id 10080 lock mode IX Record Locks记录锁会锁住索引记录。比如: select c1 from t where c1=10 for update; 此语句会阻塞其他事务对t.c1 =10 行的inserting,updating,deleting操作。记录锁总会锁住索引记录,即使一张表没有索引。因为Innodb存储引擎会创建隐藏的聚集索引, 加锁的时候会用在此聚集索引上。 在show engine innodb status\G; 的输出中会有record 锁的输出: Gap LocksGap 锁会锁住索引之间的间隙,或者锁住第一个索引之前或最后一个索引之后的记录。 比如:select c1 from t where c1 between 10 and 20 for update; 无论t.c1列是否有15这个值,都会阻塞其他的事务插入值15到列t.c1,因为10-20之间的值都被锁定了。 间隙可能是一个单独的索引,或者多个索引,也有可能是空值。Gap 锁是performance 和 concurrency之间的平衡,会用在一些事务的隔离级别。Gap 锁在寻找唯一行是不需要的。 比如:id 列有唯一索引,下面的sql只会在id 为100的行上加record 锁,不会影响到其他事务的插入操作。select * from child where id = 100;如果id 列没有索引或不是unique 索引,此sql就会锁住(-∞,10].Gap 锁能够明确的关闭。 在事务的隔离级别设置为read committed 或 开始innodb_locks_unsafe_for_binlog 参数(此参数已被废弃)。 Next-Key 锁next-key 锁是索引记录锁和间隙锁的组合。 在默认情况,Innodb 使用的是repeatable read 的事务隔离级别。 在这种情况下,Innodb 会使用next-key 锁在索引上进行查找和扫描,可以避免幻读。 Insert Intention 锁 AUTO-INC 锁 Predicate Locks for Spatial Indexes

相关推荐