Mysql的行级锁是什么意思?

文 / @UTHEME

Mysql的行级锁是什么意思?

Mysql中的锁机制主要包括表级锁、页级锁和行级锁三种。其中,行级锁是指每次锁定一行数据的锁机制。行级锁不是MySQL自己实现的锁定方式,而是由其他存储引擎自己所实现的,如InnoDB存储引擎以及MySQL的分布式存储引擎NDBCluster都支持存储引擎使用行级锁定。

行级锁的优缺点

行级锁的优点是锁粒度小,争用率低,并发高,因为每次只锁定需要的一行数据,而不是整张表或一页数据。但是,行级锁的缺点是实现复杂,开销大,加锁慢,容易出现死锁。

行级锁的类型

InnoDB的行级锁定同样分为两种类型:共享锁和排他锁。在锁定机制的实现过程中为了让行级锁定和表级锁定共存,InnoDB也同样使用了意向锁(表级锁定)的概念,也就有了意向共享锁和意向排他锁这两种。

行级锁定实现方式

InnoDB行锁是通过给索引上的索引项加锁来实现的。所以,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。

间隙锁

InnoDB的锁定规则是通过在指向数据记录的第一个索引键之前和最后一个索引键之后的空域空间上标记锁定信息而实现的。InnoDB的这种锁定实现方式被称为“NEXT-KEYlocking”(间隙锁),因为Query执行过程中通过范围查找的话,它会锁定整个范围内所有的索引键值,即使这个键值并不存在。间隙锁的作用是防止幻读,以满足相关隔离级别的要求。

优化行级锁定

为了合理利用行级锁定,我们必须做好以下工作:

尽可能让所有的数据检索都通过索引来完成,从而

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。