MySQL-锁 个人理解

image.png

间隙锁(Gap Lock)

条件:RR事务隔离级别下
锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。
间隙锁是封锁索引记录中的间隔,或者第一条索引记录之前的范围,又或者最后一条索引记录之后的范围。

下图就是六条记录,并且形成了7个间隙。 那么对间隙上锁,就是间隙锁。

image.png

间隙锁可能出现的题演示
演示1:

image.png

image.png

如上图,如果事务1 步骤5 插入的是 id= 98 ,事务2 步骤6 插入的是 id=99 数据,那么 不会出现 阻塞 死锁问题。

演示2:

image.png

表锁

对整个表进行上锁的操作,叫表锁
对表进行加锁
LOCK TABLES table_name WRITE/READ;
解锁 (释放当前会话所加的表锁)
UNLOCK TABLES;

如上方式对表进行加锁,是一种绝对加锁的方式。

如果 对表 加了写锁 以后,其它 会话,无法读表中任何数据(普通select也不行),无法做任何修改,只能阻塞,直到 表锁 释放;

如果 对表 加了读锁 以后,其它会话可以 继续读取数据,或者继续对表加读锁(共享锁),但是在加了读锁之后,其它会话就不能去修改表中任何数据,直到锁释放;

如下 操作,也会 对 表整个范围进行加锁(不同种类锁,范围覆盖整个表,也叫表锁)。

在RR的隔离级别下,当color字段 为 非索引字段时:
update table_name set field1=param1 where color=’red’;
全表扫描,最终导致 上锁的范围为整个表,其中有 X锁 有 Gap锁。

image.png

从锁定范围来讲,这里也叫表锁;

插入意向锁(InnoDB)

多个事务,在同一个索引,同一个范围区间插入记录时,如果插入的位置不冲突,不会阻塞彼此。

在插入数据时,会产生插入意向锁,会对意向id位置进行上锁(非Gap锁),属于排他锁;

事务1 插入id为1的数据,挂起事务不提交,事务2 也插入id为1的数据,则需要阻塞,直到事务1释放 意向锁。事务2 两种结果:1、主键冲突,2、执行成功;

如果事务1 插入id为1数据,事务2插入id为2数据,则互不影响。

如上内容,如有 疑问,欢迎沟通指正。

文章均来自互联网如有不妥请联系作者删除QQ:314111741 地址:http://www.mqs.net/post/15463.html

相关阅读

  • 产品推广的方式有哪些(79种推广方式总有一种适合你)

    产品推广的方式有哪些(79种推广方式总有一种适合你)

    产品的推广是企业的一个重要环节。产品的推广,不仅是让消费者了解产品,而且还能够让企业在网络上获取更多品牌影响力。只有做好了产品推广,才能够让企业在品牌建设中取得更大的成就。那么产品推广应该怎么做?不同的产品使用不同推广法。但任何一...

    2025.12.09 02:51:31作者:iseeyuTags:推广
  • 淘宝怎么运营推广(中小卖家必学的操作思路)

    淘宝怎么运营推广(中小卖家必学的操作思路)

    淘宝在很长一段时间内,一直被认为是中国最大的电子商务平台。人们在这里购物,与在别处购物一样,会感觉到很便捷、很实惠。因此,随着电商行业的发展。如今,淘宝网站的活跃用户数已经超过了1亿人(目前该数据仅统计了部分用户)。而作为一个淘宝...

    2025.12.09 01:56:09作者:iseeyuTags:运营
  • 新电商平台:抖音小店店铺运营、选品秘籍

    新电商平台:抖音小店店铺运营、选品秘籍

    核心导读: 在前几年互联网兴起时代,流量比较分散,搜索引擎是当时互联网流量的入口,那时候互联网生意如果想要获取流量,都是需要向搜索引擎去购买,竞价获取流量。所以当时以百度为主的搜索引擎等,成为了获取互联网流量的主要来源。 直至现在,...

    2025.12.08 21:54:02作者:iseeyuTags:万物尝鲜节淘宝网搜索引擎美好一直在身边

添加新评论