【MySQL】记录锁?间隙锁?临键锁?到底锁了些什么?这一篇帮你捋清楚( ̄∇ ̄)/
特别强调~
本测试使用的是MySQL 8.0.27~ 8.0.27~ 8.0.27(因为不同版本命令可能会有差异哈)
打开两个终端,分别连接上MySQL,使用select @@global.transaction_isolation;查看隔离级别(间隙锁要在可重复读的隔离级别下)
如果报类似ERROR 1193 (HY000): Unknown system variable 'tx_isolation'的错,一般是版本问题
# 老版本:select @@global.tx_isolation;select @@global.tx_isolation;# 5.8版本之后使用:select @@global.transaction_isolation;select @@global.transaction_isolation;
我们的测试表中的数据长这样
事务1
终端A开启事务,查询id=5的数据(注意加上for update使用当前读)
select * from app_user_copy1 where id = 5 for update;
查看当前事务的锁信息
select * from performance_schema.data_locks;
在MySQL 5.5以上、5.7.14以下的版本中,用户可以通过INFORMATION_SCHEMA下的INNODB_TRX、INNODB_LOCKS以及INNODB_LOCK_WAITS这三张表简单地监控并分析可能存在的锁问题
在MySQL 8.0版本中,则需要使用performance_schema下的data_locks以及data_lock_waits获取相关的锁以及锁等待信息
而MySQL版本在5.7.14到8.0之间的用户,只能通过其它手段间接的获取上述信息
我们从LOCK_MODE列中可以看到此事当前事务有两把锁(后面附有各个列的含义介绍)
第一行LOCK_MODE为IX,即意向排他锁,属于表级锁
第二行LOCK_MODE为X,REC_NOT_GAP,表示当前仅为行记录锁,且非间隙锁,属于行级锁
打开一个终端B,同样开启事务,更新id=5的行数据,会进入阻塞
update app_user_copy1 set name='test' where id=5;
等到超时了就报错
分别插入 id=3 和 id=7 的数据
INSERT INTO `app_user_copy1` (`id`, `name`, `email`, `phone`, `gender`, `password`, `age`, `create_time`, `update_time`) VALUES (3, '用户0', '123456@qq.com', '18582305042', 1, 'ef0641a4-7a7a-11ec-970f-7a9ea76b236f', 98, '2022-01-21 13:28:15', '2022-01-21 13:28:15');
INSERT INTO `app_user_copy1` (`id`, `name`, `email`, `phone`, `gender`, `password`, `age`, `create_time`, `update_time`) VALUES (7, '用户0', '123456@qq.com', '18582305042', 1, 'ef0641a4-7a7a-11ec-970f-7a9ea76b236f', 98, '2022-01-21 13:28:15', '2022-01-21 13:28:15');
都插入成功,说明当命中
【MySQL】记录锁?间隙锁?临键锁?到底锁了些什么?这一篇帮你捋清楚( ̄∇ ̄)/相关推荐
- mysql主键查询gap锁失效,mysql记录锁(record lock),间隙锁(gap lock),Next-key锁(Next-key lock)...
1. 什么是幻读? 幻读是在可重复读的事务隔离级别下会出现的一种问题,简单来说,可重复读保证了当前事务不会读取到其他事务已提交的 UPDATE 操作.但同时,也会导致当前事务无法感知到来自其他事务中的 ...
- MySQL - 全局锁、表级锁、行级锁、元数据锁、自增锁、意向锁、共享锁、独占锁、记录锁、间隙锁、临键锁、死锁
# 前言 本篇只介绍 MySQL 锁的基本知识. 我的 MySQL 版本是 MySQL 5.7.34, 建议使用 MySQL 5.6 及之后的版本. ## 先上一个图 ## 为什么要使用锁? 个人理解 ...
- mysql记录锁、间隙锁、临键锁
名词解释 记录锁:record lock,即锁住一条记录 间隙锁:gap lock,即锁定一个区间,左开又开 临键锁:记录锁+间隙锁锁定的区间,左开右闭 mysql如何加锁 假设有如下数据 其中,id ...
- MySQL 锁全集(共享锁/排它锁、记录锁/间隙锁/临键锁)
提升工作效率利器: Mac App Store 上的"Whale - 任务管理.时间.卡片.高效率" 简介:锁是计算机协调多个进程或线程并发访问某一资源变得有序的机制. 一.锁分 ...
- mysql行锁同索引键问题_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
- mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
- mysql进阶: mysql中的锁(全局锁/表锁/行锁/间隙锁/临键锁/共享锁/排他锁)
锁在生活中处处可见,门锁,手机锁等等. 锁存在的意义是保护自己的东西不被别人偷走/修改. 在mysql中锁的意义也是一样,是为了保护自己的数据不被别人进行修改,从而导致出现脏读,幻读等问题.在学习锁的 ...
- Mysql 行锁 间隙锁 临键锁
行锁 mysql 中 innodb 存储引擎支持行锁,我们平常默认使用的也是innodb存储引擎,因为innodb 引擎中有mvcc 的控制,所以我们要想测试的时候就需要手动来显示加锁 共享锁 se ...
- mysql记录锁(record lock),间隙锁(gap lock),Next-key锁(Next-key lock)亲测
行锁 记录锁(record lock) 这是一个索引记录锁,它是建立在索引记录上的锁(主键和唯一索引都算),很多时候,锁定一条数据,由于无索引,往往会导致整个表被锁住,建立合适的索引可以防止扫描整个表 ...
最新文章
- HTTP/2做错了什么?刚刚辉煌2年就要被弃用了!?
- java条件查询excel_[转]EXCEL中的多条件查询(整理)
- mysql二维转一维_二维数组转为一维数组
- 8-Qt6 智能指针QPointer
- matlab raw函数,用matlab处理Raw格式的图像文件的方法
- oracle sql 分区查询语句_oracle11g 表分区后的查询语句如何知道是否进行了全表扫描...
- 管理服务器一般的作用,管理服务器作用
- 神牛笔记:吉林大学ACM总结(fennec)
- 日文邮件变成乱码解决方案
- FastDFS之文件服务器集群部署详解
- 如何检查有哪些尝试入侵服务器IP?有哪些命令?
- 进制转化(二进制,八进制,十进制,十六进制)详细教程
- 权御天下计算机音乐数字乐谱,权御天下-洛天依-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
- python必背的英语单词怎么写_背英语单词的最好方法
- 【重识云原生】第六章容器基础6.4.10.2节——StatefulSet常规操作实操
- 历年计算机基础试题和答案,自学考试00018计算机应用基础历年试题与答案
- SQL Server数据库-表
- ElasticSearch.net NEST批量创建修改删除索引完整示例
- 二级菜单(隐藏显示)
- 杭电2015‘11校赛 1007油菜花王国
热门文章
- Centos安装firefox
- Web Service与Rest API
- 如何解决LabView的Active X容器中无Animation GIF Control问题
- 超级计算机运行吃鸡,pdd花6万买的超级电脑,第二天玩吃鸡显卡被击穿,网友:人傻钱多...
- WFU校赛题解 B、C、F
- 出乎意料,5G最大赢家是苹果而不是华为
- 怎样才能实现表格背景图片拉伸
- ccks2020中文短文本实体链接任务测评论文--小米团队--第一名
- 杭州电子科技大学全国计算机排名,杭电排名为什么比211还高,杭州电子科技大学是211吗...
- 北京杭州差距这么大?程序员在北京准点下班,在杭州12点在还加班