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

相关推荐
这个DBA有点耶5 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
这个DBA有点耶7 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技7 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend8 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence11 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
先吃饱再说1 天前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库
Nturmoils1 天前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
Databend1 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
这个DBA有点耶1 天前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构
smallyoung1 天前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql