间隙锁+临键锁

简介: 【8月更文挑战第1天】

锁住了某一段记录的锁,直观的说就是锁住了一个范围的记录,比如在查询的时候使用了< <= BETWEEN 之类的范围查询条件,就会使用间隙锁

SELECT * FROM your_tab WHERE id BETWEEN 50 AND 100 FOR UPDATE

间隙锁会锁住(50,100)之间的数据,而50和100本身会被记录锁锁住,类似的<=这种查询,也可以认为=的那个值会被记录锁锁住。
如果表里没有50,数据库会一直向左,找到第一个存在的数据,比如40;同理,如果表里没有100,那么数据库就会一直向右,找到第一个存在的数据,比如120。此时,如果有人想要插入一个主键为70的行,是无法插入的,需要等到这个SELECT语句释放掉间隙锁

间隙锁我们一般说两边都是开的,即端点是没有被间隙锁锁住的。记录锁和记录锁是排它的,但是间隙锁和间隙锁不是排它的,也就是说两个间隙锁之间即使重叠了,也还是可以加锁成功的

临键锁是一种很独特的锁,直观上可以看作是一个记录锁和间隙锁的组合,也就是说临键锁不仅仅是会用记录锁锁住命中的记录,也会用间隙锁锁住记录之间的空隙
临键锁和数据库隔离级别的联系最为紧密,可以解决在可重复读隔离级别之下的幻读问题。
间隙锁是左开右开,临键锁是左开右闭 ,如果id只有(1,4,7)三条记录,那么临键锁就把(1,4]锁住。

(幻读就是同一事务里面,同一个sql查询查出来的记录行数不一样。为什么会不一样?因为有别的事务在你执行sql的时候进行了插入,插入到了你的查询条件范围内了,导致你上一次查还好好的,下一次查就莫名奇妙多出来记录了)

目录
相关文章
|
SQL HIVE
【hive】字符串操作,截取想要的字符串
字符串操作,截取想要的字符串
2528 0
【hive】字符串操作,截取想要的字符串
|
2月前
|
SQL 运维 容灾
MySQL 主从复制全解:底层原理、复制模式差异、主从延迟排查与优化实战
本文系统解析MySQL主从复制:涵盖核心价值(高可用、读写分离、备份分析、异地多活)、binlog与redo log本质区别、GTID原理、异步/半同步/MGR三大模式对比,以及主从延迟根因排查(IO/SQL线程瓶颈)与全链路优化方案(架构、主库、从库、SQL四维优化),附实战案例与MyBatis-Plus读写分离实现。
346 3
|
3月前
|
缓存 NoSQL Java
《面试官:说说电商库存扣减如何防超卖?分布式锁的三种实现》
这是一道电商高频面试题,聚焦库存防超卖与分布式锁实战。提供可直接背诵的“三段式”方案(Redis Lua预扣 + MQ异步 + DB乐观锁),详解Redis/ZK/DB三种锁原理、源码级实现、避坑指南及大厂选型逻辑,兼顾技术深度与落地能力。(239字)
|
8月前
|
缓存 应用服务中间件 API
Nginx
Nginx:现代互联网的流量调度核心,以事件驱动架构解决高并发难题,集高性能Web服务、反向代理、负载均衡与API网关于一体,助力网站加速与系统稳定,支撑海量用户实时交互,是数字时代不可或缺的基础设施引擎。
|
SQL 监控 算法
MySQL锁定:死锁及其避免方法
MySQL锁定:死锁及其避免方法
|
消息中间件 存储 Java
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
45岁资深架构师尼恩在其读者群中分享了关于如何提升RocketMQ顺序消费性能的高并发面试题解析。面对10W QPS的高并发场景,尼恩详细讲解了RocketMQ的调优策略,包括专用方案如增加ConsumeQueue数量、优化Topic设计等,以及通用方案如硬件配置(CPU、内存、磁盘、网络)、操作系统调优、Broker配置调整、客户端配置优化、JVM调优和监控与日志分析等方面。通过系统化的梳理,帮助读者在面试中充分展示技术实力,获得面试官的认可。相关真题及答案将收录于《尼恩Java面试宝典PDF》V175版本中,助力求职者提高架构、设计和开发水平。
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
|
JSON 前端开发 数据格式
12306火车票查询--Python可以这么玩!!!
12306火车票查询--Python可以这么玩!!!
|
SQL 关系型数据库 MySQL
MySQL数据库——锁-行级锁(行锁、间隙锁和临键锁)
MySQL数据库——锁-行级锁(行锁、间隙锁和临键锁)
775 0
|
搜索推荐
在 catch 代码块中处理多个异常类型
【10月更文挑战第12天】 在 catch 代码块中处理多个异常类型
441 2

热门文章

最新文章