mysql数据库之行级锁
创始人
2024-05-31 20:14:53
0

行级锁,每次操作锁住对应的行数据,锁定粒度最小,发生锁冲突的概率最低,并发度最高。英英在innodb存储引擎中。

innodb的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。对于行级锁,主要分为以下三类:

1、行锁(record lock):锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持。

2、间隙锁(GAP lock):锁定索引记录间隙(不含该记录),确保所有记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读,在RR隔离级别下都支持。

3、临键锁(next-key lock):行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙gap,在RR隔离级别下支持。

一、行锁。

innodb实现以下两种类型的行锁。

1、共享锁(S):允许一个事务去读一行,阻止其他事务获得相同的数据集的排他锁。

2、排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。

当前所类型/请求锁类型S(共享锁)X(排他锁)
S(共享锁)兼容冲突
X(排他锁)冲突冲突

3、操作增删改查时加的行锁类型。

SQL行锁类型说明
insert排他锁自动加锁
update排他锁自动加锁
delete排他锁自动加锁
select(正常)不加任何锁
select ... lock in share mode共享锁需要手动在select之后加 lock in share mode
select ... for update排他锁需要手动在select之后加 for update

4、演示。

默认情况下,innodb在repeatable事务隔离级别运行,innodb使用next-key锁进行搜索和索引扫描,以防止幻读。

a.针对唯一索引进行检索时,对已存在的记录进行等值匹配时,将会自动优化为行锁。

共享锁之间兼容

 

 释放第二个事务的行锁

 共享锁和排他锁不兼容,id为3的可以修改,id为1的不能修改,因为id为1加了行锁。

 排他锁互斥,提交后即可修改。

b. innodb的行锁是针对于索引加的锁,不通过索引条件检索数据,那么innodb将对表中的所有记录加锁,此时就会升级为表锁。

name没有索引,所以对所有的记录加锁,升级为表锁,所以阻塞了。

 给name加索引,成功执行。

 二、间隙锁和临键锁。

默认情况下,innodb在repeatable read事务隔离级别运行,innodb使用next-key锁进行搜索和索引扫描,以防止幻读。

1、索引上的等值查询(唯一索引),给不存在的记录加锁时,优化为间隙锁。

间隙锁锁住,不能插入新数据

 事务提交后,成功添加新数据

2、索引上的等值查询(普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock退化为间隙锁。

 非唯一等值索引,为了避免出现幻读现象,加上一把间隙锁。

3、索引上的范围查询(唯一索引)会访问到不满足条件的第一个值为止。

范围查询时给19加行锁锁住,加临键锁直接25这一行及25之前的间隙,加临键锁锁正无穷大以及正无穷到25之间的间隙。

 注意:间隙锁唯一目的是防止其他事务插入间隙,间隙锁可以共存,一个事务采用的间隙锁不会组织另一个事务在同一间隙上采用间隙锁。

间隙锁锁的是间隙,不包含对应的数据记录,临键锁不仅会包含当前的数据记录,也会锁定该数据记录之前的间隙。

相关内容

热门资讯

美丽的神农谷三年级作文(精简... 美丽的神农谷三年级作文 篇一神农谷是我家附近一个非常美丽的地方。每当我有时间,我都会去神农谷散步。神...
我的学校三年级作文(优质6篇... 我的学校三年级作文 篇一我喜爱的学校图书馆我所在的学校有一个很棒的图书馆,它是我最喜欢去的地方之一。...
三年级作文新学期的开始【经典... 三年级作文新学期的开始 篇一新学期的开始新学期开始了,同学们都充满了期待和憧憬。我们迈进了三年级的课...
小学三年级我的老师作文400... 篇一:小学三年级我的老师我非常喜欢我的小学三年级的老师,她是一个非常好的老师。她叫李老师,是一个年轻...
将门虎子三年级作文(精彩3篇... 将门虎子三年级作文 篇一我的宠物小狗我家有一只很可爱的宠物小狗,它的名字叫将门虎子。将门虎子是一只三...
母爱是无私的三年级作文【优秀... 母爱是无私的三年级作文 篇一母爱是无私的母爱是世界上最伟大的力量,它是无私的。无论是在我们出生的那一...
第一次掌勺作文_三年级作文(... 第一次掌勺作文_三年级作文 篇一第一次掌勺今天,我迎来了人生中第一次掌勺的机会。我既兴奋又紧张,因为...
小学三年级作文700字 【精品】小学三年级作文700字3篇  在日常学习、工作抑或是生活中,说到作文,大家肯定都不陌生吧,写...
黄岩石窟三年级作文(实用3篇... 黄岩石窟三年级作文 篇一探秘黄岩石窟我家住在浙江省的黄岩市,最近我们班组织了一次参观黄岩石窟的活动。...
假如我会变三年级450字作文... 假如我会变三年级450字作文 篇一如果我能变成三年级的学生,我会怎么样呢?首先,我会更加努力学习,争...
可恶的小老鼠三年级作文【精简... 可恶的小老鼠三年级作文 篇一最近我们班的教室里出现了一个可恶的小老鼠。这只小老鼠总是在我们不注意的时...
三年级作文200个子18篇【... 篇一:我的暑假计划暑假即将来临,我早早地制定了一个丰富多彩的暑假计划。首先,我计划读很多好书。我喜欢...
小学三年级作文400字【实用... 小学三年级作文400字 篇一爱护小动物我家附近有一个小公园,里面有很多小动物。我喜欢去那里看它们,但...
三年级科幻作文智能干家务的机... 三年级科幻作文智能干家务的机器人 篇一智能家务机器人的出现在未来的世界里,科技发展迅速,人们的生活变...
三年级下册我做了一项小实验作... 三年级下册我做了一项小实验作文 篇一标题:探究种子发芽的条件在三年级下册的科学课上,我们进行了一项小...
三年级学生感受作文(优选6篇... 三年级学生感受作文 篇一我喜欢上学的理由我是一个三年级的学生,我非常喜欢上学。每天早上,当妈妈叫我起...
小学三年级说好普通话作文(优... 小学三年级说好普通话作文 篇一我要当一个好学生我是一个小学三年级的学生,我知道要成为一个好学生,首先...
三年级的黄果树瀑布的作文怎么... 篇一:三年级的黄果树瀑布之旅黄果树瀑布是中国贵州省的一处自然景观,也是我国最大的瀑布之一。作为一个三...
三年级作文抓鱼趣事21篇【最... 三年级作文抓鱼趣事21篇 篇一:我和小伙伴们的抓鱼经历在一个阳光明媚的周末,我和几个小伙伴决定去河边...
三年级作文:踢足球(精简6篇... 三年级作文:踢足球 篇一踢足球是我最喜欢的运动之一。我每天放学后都会和朋友们一起来到学校的操场上踢球...