OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7740|回复: 0

苹果手机怎么找115资源-DIY

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2021-6-6
在线时间
1 小时
发表于 2021-6-6 19:35:13 | 显示全部楼层 |阅读模式
1金钱
欢迎《AKQ115》幑,是索引记录上的记录锁和索引记录之前的间隙上的间隙锁的组合。

先给自己来一串小问号???


在主键、唯一索引、普通索引以及普通字段上加锁,是锁住了哪些索引?
不同的查询条件,分别锁住了哪些范围的数据?
for share 和 for update 等值查询和范围查询的锁范围?
当查询的等值不存在时,锁范围是什么?
当查询条件分别是主键、唯一索引、普通索引时有什么区别?




既然啥都不懂,那只好从头开始操作实践一把了!


先看看看 《MySQL 45 讲》中丁奇老师的结论:






看了这结论,应该可以解答一大部分问题,不过有一句非常非常重点的话需要关注:MySQL 后面的版本可能会改变加锁策略,所以这个规则只限于截止到现在的最新版本,即 5.x 系列<=5.7.24,8.0 系列 <=8.0.13


所以,以上的规则,对现在的版本并不一定适用,下面我以 MySQL 8.0.25 版本为例,进行多角度验证 next-key lock 加锁范围。


环境准备
MySQL 版本:8.0.25


隔离级别:可重复读(RR)


存储引擎:InnoDB


mysql> select @@global.transaction_isolation,@@transaction_isolation\G
mysql> show create table t\G




如何使用 Docker 安装 MySQL,可以参考另一篇文章《使用 Docker 安装并连接 MySQL》


主键索引
首先来验证主键索引的 next-key lock 的范围






此时数据库的数据如图所示,对主键索引来说此时数据间隙如下:






主键等值查询 —— 数据存在
mysql> begin; select * from t where id = 10 for update;
这条 SQL,对 id = 10 进行加锁,可以先思考一下加了什么锁?锁住了什么数据?


可以通过 data_locks 查看锁信息,SQL 如下:


# mysql> select * from performance_schema.data_locks;
mysql> select * from performance_schema.data_locks\G
具体字段含义可以参考 官方文档






结果主要包含引擎、库、表等信息,咱们需要重点关注以下几个字段:


INDEX_NAME:锁定索引的名称
LOCK_TYPE:锁的类型,对于 InnoDB,允许的值为 RECORD 行级锁 和 TABLE 表级锁。
LOCK_MODE:锁的类型:S, X, IS, IX, and gap locks
LOCK_DATA:锁关联的数据,对于 InnoDB,当 LOCK_TYPE 是 RECORD(行锁),则显示值。当锁在主键索引上时,则值是锁定记录的主键值。当锁是在辅助索引上时,则显示辅助索引的值,并附加上主键值。
结果很明显,这里是对表添加了一个 IX 锁 并对主键索引 id = 10 的记录,添加了一个 X,REC_NOT_GAP 锁,表示只锁定了记录。


同样 for share 是对表添加了一个 IS 锁并对主键索引 id = 10 的记录,添加了一个 S 锁。


可以得出结论:


对主键等值加锁,且值存在时,会对表添加意向锁,同时会对主键索引添加行锁。


主键等值查询 —— 数据不存在
mysql> select * from t where id = 11 for update;
如果是数据不存在的时候,会加什么锁呢?锁的范围又是什么?


在验证之前,分析一下数据的间隙。






id = 11 是肯定不存在的。但是加了 for update,这时需要加 next-key lock,id = 11 所属区间为 (10,15] 的前开后闭区间;
因为是等值查询,不需要锁 id = 15 那条记录,next-key lock 会退化为间隙

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-14 10:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表