MySQL深入——12

我们今天来谈谈临键锁

next-key lock(临键锁)是记录锁与间隙锁的结合,锁定一个范围。

他被主要应用于解决幻读的问题

临键锁的几个要点:

1.他是前开后闭区间

2.查找过程中访问到的对象会加锁

优化:1.在索引上的等值查询,给唯一索引加锁的时候,next-key lock 会退化为行锁

2.在索引上的等值查询,向右遍历查询且最后一个值不满足等值条件时,next-key lock退化为间隙锁。

bug:唯一索引上的范围查询会访问到不满足条件的第一个值为止。

我们接下来举一些例子来说明,在举例子之前,我要特别说明隔离级别为可重复读,因为在可重复读下间隙锁才是有效的。

而且lock in share mode 和 for update是不一样的,它们的区别在于

Lock in Share Mode是一种共享锁,允许多个事务同时持有对某一行的读锁。这意味着,当一个事务对某行数据加上共享锁之后,其他事务也可以对该数据加共享锁,但不能加排他锁,并且只能进行读操作,不能进行写操作。这种锁适合用于在两张表存在业务关系上的一致性要求时的操作场景。

For Update则是一种排他锁,也称为行锁。当一个事务对数据加上排他锁之后,其他事务不能对该数据加任何的锁,包括共享锁和排他锁。获取排他锁的事务既能读取数据,也能修改数据。这种锁适用于操作同一张表时保证业务的一致性要求。

相关推荐
疯狂的挖掘机8 小时前
记一次基于QT的图片操作处理优化思路(包括在图上放大缩小,截图,画线,取值等)
开发语言·数据库·qt
奇树谦9 小时前
Qt | 利用map创建多个线程和定时器
网络·数据库·qt
用户47949283569159 小时前
性能提升 4000%!我是如何解决 运营看板 不能跨库&跨库查询慢这个难题的
数据库·后端·postgresql
电商API&Tina9 小时前
跨境电商 API 对接指南:亚马逊 + 速卖通接口调用全流程
大数据·服务器·数据库·python·算法·json·图搜索算法
robinson198810 小时前
验证崖山数据库标量子查询是否带有CACHE功能
数据库·oracle·cache·自定义函数·崖山·标量子查询
老华带你飞10 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
SelectDB10 小时前
5 倍性能提升,Apache Doris TopN 全局优化详解|Deep Dive
数据库·apache
JIngJaneIL11 小时前
基于springboot + vue房屋租赁管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
陈平安安11 小时前
设计一个秒杀功能
java·数据库·sql
isNotNullX11 小时前
数据处理的流程是什么?如何进行数据预处理?
数据库·数据资产管理·数据处理·企业数字化