临键锁解决当前读的幻读问题(通过锁定范围,使另外一个事务不能插入),mvcc解决不加锁读的幻读问题。

create table test(

`id` int,

`grade` char(1),

`name` varchar(20),

primary key (`id`),

key grade_idx (`grade`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into test values(1,'a','xiaoa');

insert into test values(4,'e','xiaoe');

insert into test values(8,'l','xiaol');

insert into test values(12,'o','xiaoo');

insert into test values(16,'r','xiaor');

insert into test values(20,'u','xiaou');

insert into test values(24,'w','xiaow');

insert into test values(28,'z','xiaoz');

#############################

insert into test values(1,'a','xiaoa'); (-,a]

insert into test values(4,'e','xiaoe'); (a,e]

insert into test values(8,'l','xiaol'); (e,l]

insert into test values(12,'o','xiaoo'); (l,o]

insert into test values(16,'r','xiaor'); (o,r]

insert into test values(20,'u','xiaou'); (r,u]

insert into test values(24,'w','xiaow'); (u,w]

insert into test values(28,'z','xiaoz'); (w,z]

(z,+)

innodb 默认才用临键锁,

如果查询没有命中索引,则退化为表锁;

如果等值查询唯一索引且命中唯一1条记录,则退化为行锁;

如果等值查询唯一索引且没有命中记录,则退化为临近结点的间隙锁;

如果范围查询唯一索引或查询非唯一索引且命中记录,则锁定所有命中行的临键锁 ,并同时锁定最大记录行下一个区间的间隙锁。

如果范围查询非唯一索引且没有命中记录,退化为临近结点的间隙锁(包括结点也被锁定)。

注意:被锁定的范围其他事务无法进行插入和删除操作,但可以select..for update;

参考:https://www.cnblogs.com/crazylqy/p/7773492.html

session 2(id=3可插入;id=108无法插入,存在gap lock;id=123的记录无法select..in share mode,因为该记录上存在record lock;id=125可以被select..in share mode和update,这点比较奇怪,应该这也算是当前读,不过后来查看官方文档得知,gap锁只会阻塞insert操作,因为gap间隙中是不存在任何记录的,除了insert操作,其他的操作结果应该都等价于空操作,mysql就不去阻塞它了)

mysql临键锁_innodb临键锁锁定范围相关推荐

  1. mysql行锁同索引键问题_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)

    1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...

  2. mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)

    详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC  ...

  3. MySQL - 全局锁、表级锁、行级锁、元数据锁、自增锁、意向锁、共享锁、独占锁、记录锁、间隙锁、临键锁、死锁

    # 前言 本篇只介绍 MySQL 锁的基本知识. 我的 MySQL 版本是 MySQL 5.7.34, 建议使用 MySQL 5.6 及之后的版本. ## 先上一个图 ## 为什么要使用锁? 个人理解 ...

  4. MySQL锁 —— 记录锁、间隙锁、临键锁、自增锁

    MySQL的事务隔离级别有:未提交读.已提交读.可重复读.可串行化,除了串行化,在不同的隔离级别下,都会存在不同的并发问题,MySQL默认隔离级别是可重复读,在这种隔离级别下,存在幻读的问题,MySQ ...

  5. MySQL的锁机制 - 记录锁、间隙锁、临键锁

    记录锁(Record Locks) 记录锁是 封锁记录,记录锁也叫行锁,例如: SELECT * FROM `test` WHERE `id`=1 FOR UPDATE; 它会在 id=1 的记录上加 ...

  6. mysql记录锁、间隙锁、临键锁

    名词解释 记录锁:record lock,即锁住一条记录 间隙锁:gap lock,即锁定一个区间,左开又开 临键锁:记录锁+间隙锁锁定的区间,左开右闭 mysql如何加锁 假设有如下数据 其中,id ...

  7. MySQL中的各种锁(行锁、间隙锁、临键锁等等LBCC)

    目录 1.快照读和锁定读 1.1 一致性读 / 快照读 1.2 锁定读 1.2.1 共享锁和独占锁 1.2.2 锁定读的语句 1.2.2.1 Lock In Share Mode 对记录加S共享锁 1 ...

  8. MySQL怎么运行的系列(十)Innodb中的锁:记录锁、临键锁、间隙锁、意向锁

    本系列文章目录 展开/收起 MySQL怎么运行的系列(一)mysql体系结构和存储引擎 MySQL怎么运行的系列(二)Innodb缓冲池 buffer pool 和 改良版LRU算法 Mysql怎么运 ...

  9. 【Java面试题】6年开发去A里面试P6竟被Mysql难住了,说一下你对行锁、临键锁、间隙锁的理解

    一个工作了6年的程序员,最近去阿里面试p6这个岗位. 面试之前信心满满的和我说,这次一定要拿下 35k月薪的offer. 然后,在第一面的时候,被Mysql里面的一个问题难住了. 大家好,我是Mic, ...

  10. MySQL 行级锁(行锁、临键锁、间隙锁) 小白教程

    一.行级锁 行级锁,每次操作锁住对应的行数据.锁定粒度最小,发生锁冲突的概率最低,并发度最高.应用在InnoDB存储引擎中. InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的 ...

最新文章

  1. Visual Studio 2015 安装
  2. android与gradle版本,android – Gradle错误:支持的最低Gradle版本...
  3. SpringBoot简单使用ehcache
  4. Elasticsearch和solr的区别
  5. 用Python爬取Bilibili上二次元妹子的视频
  6. redistemplate怎么修改数据_如何使用RedisTemplate访问Redis数据结构?
  7. CentOs基础操作指令(vim、关机)
  8. img 样式单和属性
  9. selenium操作webdriver(一)
  10. 3.Magento的布局(Layout),块(Block)和模板(Template)
  11. netty如何知道连接已经关闭,socket心跳,双工?异步?
  12. 计算机转换外界信息原理,高级文秘及办公自动化教程-计算机基础
  13. 仿真动画是怎么制作的? 仿真动画类型有哪些?
  14. CSMA/CD协议总结最短帧长计算
  15. c语言输出字符的十六进制,用c语言输入键盘上的字符后转换成十六进制输出
  16. 可以免费发布本地生活分类信息的网站大全
  17. 李岳恒:高可用的以太坊智能合约下的Token经济即将来临
  18. 松勤11期软件测试之Jmeter高级性能测试项目实战学习笔记
  19. 当前有那些胎压监测芯片,您知道吗?--TPMS芯片
  20. 阿里云Optane+QLC存储实践案例分享

热门文章

  1. 形容计算机技术发展的词,形容技术发展的成语是什么_四字词语 - 成梦词典
  2. 今晚8:00 | CEI Lab 软硬件协同优化专题,顶会MICRO最佳论文作者来啦
  3. 传输层协议 ——— UDP协议
  4. android手机 恢复微信图片,恢复微信清理过的图片?屡试不爽的找回方法!
  5. Mysql 查询每个班级的成绩最好前三名(并列与不并列的情况)
  6. 2009年全国数模比赛,江苏三等奖名单
  7. 软考中级网络工程师证书如何查询?
  8. 长链接转化成短链接java,长链接转短链接(短网址)
  9. python Numpy中的array函数讲解及各参数含义
  10. does not have permission to content://包名/external_files/sple/IMG_123123141.jpg