mysql 间隙锁专题
本文研究记录mysql间隙锁,涉及以下情况
唯一索引
非唯一索引
范围更新
等值更新
mysql8
mysql7
RR
RC
数据准备
mysql> select * from vodb.test1 limit 5;
+----+------+------+--------+------------------------+---------------------+
| id | uid | tid | tname | tvalue | createtime |
+----+------+------+--------+------------------------+---------------------+
| 1 | 1 | 0 | aaabbb | 有张有驰有分寸0 | 2021-04-20 14:06:44 |
| 2 | 2 | 1 | aaabbb | 有张有驰有分寸1 | 2021-04-20 14:06:44 |
| 8 | 8 | 1 | aaabbb | 有张有驰有分寸1 | 2021-04-20 14:14:25 |
| 9 | 9 | 2 | aaabbb | 有张有驰有分寸2 | 2021-04-20 14:14:25 |
| 10 | 10 | 3 | aaabbb | 有张有驰有分寸3 | 2021-04-20 14:14:25 |
+----+------+------+--------+------------------------+---------------------+
5 rows in set (0.00 sec)
表结构
mysql> desc vodb.test1;
+------------+-------------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+-------------------+-------------------+
| id | int | NO | PRI | NULL | auto_increment |
| uid | int | YES | UNI | NULL | |
| tid | int | YES | MUL | NULL | |
| tname | varchar(12) | YES | | NULL | |
| tvalue | varchar(90) | YES | | NULL | |
| createtime | datetime | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+------------+-------------+------+-----+-------------------+-------------------+
6 rows in set (0.00 sec)
mysql7、非唯一索引、范围更新、RR
mysql> begin;
Query OK, 0 rows affected (0.00 sec) mysql> select * from test1 where tid between 1 and 7 for update;
mysql> insert into vodb.test1(id,uid,tid,tname,tvalue) values(4,4,1,'a','b');
结论:会锁定间隙,不允许其他事务插入
mysql7、非唯一索引、等值更新、RR
mysql> select * from test1 where tid =1 for update;
mysql> insert into vodb.test1(id,uid,tid,tname,tvalue) values(3,3,2,'a','b'); ^C^C -- query aborted
ERROR 1317 (70100): Query execution was interrupted
mysql>
mysql> insert into vodb.test1(id,uid,tid,tname,tvalue) values(5,5,2,'a','b'); ^C^C -- query aborted
ERROR 1317 (70100): Query execution was interrupted
结论:会锁定间隙,不允许其他事务插入
mysql7、唯一索引、范围更新、RR
mysql> select * from test1 where uid between 2 and 8 for update;
+----+------+------+--------+------------------------+---------------------+
| id | uid | tid | tname | tvalue | createtime |
+----+------+------+--------+------------------------+---------------------+
| 2 | 2 | 1 | aaabbb | 有张有驰有分寸1 | 2021-04-20 14:17:20 |
| 8 | 8 | 7 | aaabbb | 有张有驰有分寸7 | 2021-04-20 14:17:20 |
+----+------+------+--------+------------------------+---------------------+
2 rows in set (0.00 sec)
mysql> insert into vodb.test1(id,uid,tid,tname,tvalue) values(3,3,2,'a','b'); ^C^C -- query aborted
ERROR 1317 (70100): Query execution was interrupted
结论:会锁定间隙,不允许其他事务插入
mysql7、唯一索引、等值更新、RR :会锁定间隙,不允许其他事务插入
其他场景,mysql8 等,记录略,结果如下
---------------------------------------------------------------------------------------------------------------
RR 级别:不管是唯一索引还是非唯一索引,更新数据锁类型:行锁+间隙锁
RC 级别:不管是唯一索引还是非唯一索引,更新数据锁类型:行锁,无间隙锁
---------------------------------------------------------------------------------------------------------------
mysql 间隙锁专题的更多相关文章
- MySQL 间隙锁
一.根据案例二:不同索引加锁顺序的问题,模拟重现死锁(详细操作步骤) 1.RR级别下,更新操作默认会加行级锁,行级锁会对索引加锁 2.如果更新语句使用多个索引,行级锁会先锁定普通索引,再锁定聚簇索引 ...
- Mysql 间隙锁原理,以及Repeatable Read隔离级别下可以防止幻读原理(百度)
Mysql知识实在太丰富了,前几天百度的面试官问我MySql在Repeatable Read下面是否会有幻读出现,我说按照事务的特性当然会有, 但是面试官却说 Mysql 在Repeatable Re ...
- 关于mysql 间隙锁
前段时间系统老是出现update死锁,很是纠结.经过排查发现是间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围.间隙锁的主要作用是为了防止出现 ...
- MySQL间隙锁问题
间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间. 最近用户反馈说系统老是出现insert时,等待超时了,最后发现是ins ...
- mysql间隙锁
什么是间隙锁(gap lock)? 间隙锁是一个在索引记录之间的间隙上的锁. 间隙锁的作用? 保证某个间隙内的数据在锁定情况下不会发生任何变化.比如我mysql默认隔离级别下的可重复读(RR). 当使 ...
- mysql间隙锁 转
前面一文 mysql锁 介绍了mysql innodb存储引擎的各种锁,本文介绍一下innodb存储引擎的间隙锁,就以下问题展开讨论 1.什么是间隙锁?间隙锁是怎样产生的? 2.间隙锁有什么作用? 3 ...
- 视频+图文串讲:MySQL 行锁、间隙锁、Next-Key-Lock、以及实现记录存在的话就更新,如果记录不存在的话就插入如何保证并发安全
导读 Hi,大家好!我是白日梦!本文是MySQL专题的第 27 篇. 下文还是白日梦以自导自演的方式,围绕"如何实现记录存在的话就更新,如果记录不存在的话就插入."展开本话题.看看 ...
- Mysql innodb 间隙锁
前段时间系统老是出现insert死锁,很是纠结.经过排查发现是间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围.间隙锁的主要作用是为了防止出现 ...
- Mysql锁机制--间隙锁的危害
Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS employee; CREATE TABLE IF NOT EXISTS ...
随机推荐
- Vulnstack内网靶场4
环境 漏洞详情 (qiyuanxuetang.net) 仅主机模式内网网段192.168.183.0/24 外网网段192.168.157.0/24 其中Ubuntu作为对外的内网机器 攻击机kali ...
- APP 自动化之手势操作appium提供API详解(四)
一.手势操作1.上下左右滑屏 swipe---滑动 java-client 4.x 是有swipe方法的,可以通过传递坐标信息就可以完成滑动androidDriver.swipe(startx, st ...
- jenkins 生成HTML报表,邮件推送
1.登录jenkins,系统管理=>插件管理 =>可选插件安装 安装成功: 2.打开任务,进入配置 3.添加构建后操作 4.配置页面 5.构建后report输出配置完成后点击立即构建,构建 ...
- 集合概述&集合之List接口
集合与数组存储概述 集合.数组都是对多个数据进行存储操作的结构,简称Java容器.此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中) 数组存储的特点: ...
- python unicode escape
from: https://stackoverflow.com/questions/44742806/how-to-remove-escape-characters-escaping-unicode- ...
- SVN错误:Attempted to lock an already-locked dir svn: Working copy locked
VN错误:Attempted to lock an already-locked dir update D:/workspace20/SC_200/metadata -r 3398 --force ...
- PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilder,阿里MAVEN仓库地址更新为了https问题
http://maven.aliyun.com/nexus/content/groups/public/,仓库地址更新为了https,所以下载时需要ssl认证,我们可以忽略ssl检查导致的问题,我们可 ...
- [loj3285]Circus
将奶牛的状态用序列$\{a_{1},a_{2},...,a_{m}\}$来描述,其中$a_{i}$表示第$i$头奶牛的位置(奶牛数量为$m$) 下面,先来考虑对于某个特定的$m$如何处理: 对于一条简 ...
- [loj2504]小H爱染色
以下考虑直接对所有$F(A)$求和,并给出两种做法-- 做法1: 枚举答案$A$,对应方案数为${n-A\choose m}^{2}-{n-A-1\choose m}^{2}$,即答案为$\sum_{ ...
- [bzoj5025]单调上升路径
由于题目的证明可以发现$ans\ge 2m/n \ge n-1$,于是大胆猜测答案就是n-1若n是奇数,则将边分为n组,每组(n-1)/2,如果同组内边没有交点,那么只需要每一组边一个权值区间,从每一 ...