首页 > 网络运维 > Linux/Mysql > 正文

Mysql间隙锁详解

Mysql间隙锁详解

技术进步,数据库也不断变得及其复杂,多用户的并发访问,对于事务的处理和并发控制,也越来越令人头疼。Mysql里,也提供了让人感到很熟悉的读写锁,但是针对于实现数据库读写分离的时候,就要用到另一个名叫间隙锁(Gap Lock)的锁了——本文就将着重深入的讲解MySQL的间隙锁的用法。

首先,间隙锁的作用是什么呢? 间隙锁的作用是防止「非当前事务对已经提交的数据的更新」——当一个事务进行更新时,在它之前的记录上会加上一个间隙锁,其它的事务都不能在这个事务的空隙上插入新纪录,否则就会阻塞住。

关于间隙锁,MySQL是以一个事务为单位。那么MySQL是以什么样的阻塞来实现间隙锁事务间防止数据更新呢? 目前,据 MySQL 的官方文档,间隙锁在下面几种情况中会被触发:

1、如果一个事务尝试更新一条已经commit的数据,MySQL会触发加上一个间隙锁。但是,这个间隙锁只会在共享模式( shared mode)下触发,而不是在可重复读的隔离模式( repeatable-read isolation mode )下。

2、当一个事务尝试插入到另一个事务已经提交的数据之前也会触发间隙锁。的确,SPJ 语句(Select ... Insert ... Join)在一条特定的记录上加上了隔离锁,确保在插入之前不会有其他的读取或者更新。

3、当一个事务在已经提交的记录上进行查询操作时,也可以请求间隙锁,这样可以让其他事务在这条记录上面不能够做任何操作。这种情况下,间隙锁会在有这样的请求的时候添加。

4、当一个事务在排序的时候,如果它会读取大量的数据,那么会有可能会触发一个间隙锁,使得执行的数据库操作更快。

MySQL 的间隙锁是非常重要的一项功能,让我们通过它可以有效的允许多个客户端同时使用数据库,而且又不会出现资源竞争的情况。需要强调一点是,要真正提高 MySQL 事务效率,除了间隙锁外,你还要使用其它的技术,比如索引,更实际的做法是将索引和间隙锁一起使用,以实现最佳的效果。

打赏
海报

本文转载自互联网,旨在分享有价值的内容,文章如有侵权请联系删除,部分文章如未署名作者来源请联系我们及时备注,感谢您的支持。

转载请注明本文地址:http://atpbike.com/article/mysql/2470.html

相关推荐

支付宝
微信
赞助本站