当前位置: 首页 > news >正文

【Mysql】-锁,行级锁

Mysql

mysql中的行锁

在 MySQL 的 InnoDB 存储引擎中,行级锁通常是加在索引上的,而不是直接加在数据行上。这种机制是基于索引的锁定策略,具体来说:

  1. 主键索引:如果查询更新使用了主键进行查找,InnoDB 会直接在主键索引上加锁。

  2. 唯一索引:如果查询更新使用了唯一索引(UNIQUE INDEX)进行查找,并且能够通过该唯一索引确定唯一的记录,那么 InnoDB 会在唯一索引上加锁。

  3. 非唯一索引:如果查询更新使用了非唯一索引进行查找,InnoDB 会在非唯一索引上加锁。但是,由于非唯一索引可能对应多条记录,InnoDB 还需要在这些记录的聚簇索引(通常是主键索引)上加锁以确保数据的一致性。

  4. 无索引:如果查询更新没有使用任何索引(例如全表扫描),InnoDB 会在聚簇索引(通常是主键索引)的所有记录上加锁。

具体示例

假设有一个表 users,其结构如下:

Sql

CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(255) UNIQUE,email VARCHAR(255)
);
  • 如果执行以下查询:

    Sql
    SELECT * FROM users WHERE id = 1 FOR UPDATE;

    InnoDB 会在 id 索引(即主键索引)上加锁。

  • 如果执行以下查询:

    Sql
    SELECT * FROM users WHERE username = 'john_doe' FOR UPDATE;

    InnoDB 会在 username 索引(即唯一索引)上加锁。

  • 如果执行以下查询:

    Sql
    SELECT * FROM users WHERE email = 'john@example.com' FOR UPDATE;

    假设 email 没有索引,InnoDB 将执行全表扫描并在所有记录的主键索引上加锁。

总结

行级锁通常不是直接加在数据行上的,而是加在与数据行相关的索引项上。这是因为索引提供了快速定位数据的方式,同时也可以高效地管理锁。通过这种方式,InnoDB 可以最小化锁的影响范围,提高并发性能。如果你希望避免不必要的锁,确保你的查询尽可能使用合适的索引是非常重要的。

*** Mysql IX IS锁是表级锁,如果表中有数据行索引加了索引行锁x s 锁 就会在表上加上iX 或 IS 表明 表内部的数据正被加锁了

Oracle

在 Oracle 数据库中,行级锁是直接加在数据行上的,而不是索引上。Oracle 使用一种称为“多版本并发控制”(Multiversion Concurrency Control, MVCC)的技术来管理事务和锁,这与 MySQL 的 InnoDB 存储引擎有一些相似之处,但实现细节有所不同。

Oracle 中的行级锁

  • 锁定机制:当一个事务修改某一行时,Oracle 会在该行上放置一个排他锁(Exclusive Lock)。这个锁确保了在同一时间只有一个事务可以修改这一行。

  • 索引的作用:虽然锁是直接放在数据行上的,但索引对于快速定位需要锁定的行非常重要。通过索引,Oracle 可以迅速找到并锁定相关的数据行,而不需要进行全表扫描。

  • 锁定粒度:Oracle 的行级锁只锁定被修改的行,这样可以最大限度地减少对其他事务的影响,并提高并发性能。

锁模式

Oracle 提供了几种不同的锁模式,包括:

  • 共享锁 (S Lock):允许多个事务读取同一行,但阻止任何事务对其进行修改。
  • 排他锁 (X Lock):允许一个事务独占访问某一行,阻止其他事务对该行进行读取或修改。
  • 行级共享锁 (Row Share Lock, RS Lock):允许其他事务获取行级共享锁或读取该行,但阻止其他事务获取排他锁。
  • 行级排他锁 (Row Exclusive Lock, RX Lock):允许其他事务读取该行,但阻止其他事务获取任何类型的写锁。

示例

假设有一个表 employees,其结构如下:

Sql

CREATE TABLE employees (id NUMBER PRIMARY KEY,name VARCHAR2(100),salary NUMBER
);
  • 如果执行以下更新语句:

    Sql
    UPDATE employees SET salary = 50000 WHERE id = 1;

    Oracle 会在 id = 1 的那条记录上放置一个排他锁。

  • 如果执行以下查询语句(使用 FOR UPDATE 子句):

    Sql

    SELECT * FROM employees WHERE id = 1 FOR UPDATE;

    Oracle 也会在 id = 1 的那条记录上放置一个排他锁,防止其他事务修改这条记录。

总结

在 Oracle 中,行级锁是直接加在数据行上的,而不是索引上。索引用于快速定位需要锁定的行,但实际的锁是加在数据行上的。这种设计使得 Oracle 能够高效地管理并发访问,同时保证数据的一致性和隔离性。

相关文章:

【Mysql】-锁,行级锁

Mysql mysql中的行锁 在 MySQL 的 InnoDB 存储引擎中,行级锁通常是加在索引上的,而不是直接加在数据行上。这种机制是基于索引的锁定策略,具体来说: 主键索引:如果查询更新使用了主键进行查找,InnoDB 会直…...

手机功耗技术领域

手机功耗技术领域 器件 器件-电池 提升电池能量密度 提升正极电压、升级负极材料正极电压方面,目前行业还是以4.5V体系为主;4.53V体系预计24-25年落地;负极材料方面,石墨体系每年2%能量密度提升迭代; 掺硅方案目前…...

Golang | Leetcode Golang题解之第493题翻转对

题目&#xff1a; 题解&#xff1a; type fenwick struct {tree []int }func newFenwickTree(n int) fenwick {return fenwick{make([]int, n1)} }func (f fenwick) add(i int) {for ; i < len(f.tree); i i & -i {f.tree[i]} }func (f fenwick) sum(i int) (res int)…...

linux笔记(yum本地源仓库搭建)

一、准备工作 安装必要的软件包 在大多数 Linux 发行版中&#xff0c;Yum 已经默认安装。如果系统中没有安装&#xff0c;可以根据发行版的包管理器进行安装。 准备本地源文件 可以是光盘镜像&#xff08;如果是从光盘安装系统&#xff09;&#xff0c;或者是已经下载好的系…...

K8S系列-Kubernetes网络

一、Kubernetes网络模型 ​ Kubernetes网络模型设计的一个基础原则是&#xff1a;每个Pod都拥有一个独立的IP地址&#xff0c;并假定所有Pod都在一个可以直接连通的、扁平的网络空间中&#xff0c;不管它们是否运行在同一个Node&#xff08;宿主机&#xff09;中&#xff0c;都…...

Excel 对数据进行脱敏

身份证号脱敏&#xff1a;LEFT(A2,6)&REPT("*",6)&RIGHT(A2,6) 手机号脱敏&#xff1a;LEFT(B2,3)&REPT("*",5)&RIGHT(B2,3) 姓名脱敏&#xff1a;LEFT(C2,1)&REPT("*",1)&RIGHT(C2,1) 参考&#xff1a; excel匹配替换…...

OJ-1014田忌赛马

示例1&#xff1a; 输入 11 8 20 10 13 7 输出 1 示例2&#xff1a; 输入 11 12 20 10 13 7 输出 2 示例3&#xff1a; 输入 1 2 3 4 5 6 输出 6 解题思路&#xff1a; 问题的关键在于调整数组a的顺序,使得尽可能多的a[i] > b[i]。为了达到最优结果,我们可以采用贪心的策…...

Excel重新踩坑3:条件格式;基本公式运算符;公式中的单元格引用方式;公式菜单栏其他有用的功能说明;

0、前言&#xff1a;以下内容是学习excel公式的基础内容。 1、需求&#xff1a;将表格特定区域中数值大小大于等于30&#xff0c;小于等于80的单元格&#xff0c;颜色填充为红色&#xff0c;大于80的&#xff0c;颜色填充为黄色。 新建规则之后也可以通过该功能清除规则。 2、基…...

【AI知识点】FAISS如何提高检索效率?

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 FAISS&#xff08;Facebook AI Similarity Search&#xff09; 是一个高效的相似度搜索库&#xff0c;专门设计用于处理大规模的向量检索任务&#xff0c;尤其是在稠密向量的检索中表现出色。FAISS 能够显著提高检索效率…...

【Git】Gitlab进行merge request的时候,出现待合并分支合并了主分支的问题的解决

最近在公司开始用merge request进行代码合并了。 然后不知道为啥&#xff0c;如果待合并分支&#xff08;A&#xff09;进行merge request到主分支&#xff08;B&#xff09;的时候&#xff0c;如果A和B有冲突&#xff0c;然后我在gitlab上使用页面进行冲突的解决&#xff0c;比…...

jetson nano ubuntu20.04安装ros-Noetic

jetson nano ubuntu20.04 安装ros-Noetic 一. 初始准备nano连接wifinano网络配置二. 查看系统版本三. 开始安装1. 移除不需要的 amd64 架构2. 配置软件源3.安装 ROS Melodic`4. 解决 rosdep update报错`一. 初始准备 nano连接wifi nano网络配置 二. 查看系统版本 lsb_relea…...

【数据结构与算法】走进数据结构的“时间胶囊”——栈

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 引言 一.栈的基本概念 1.1 定义 1.2 特性 1.3 基本操作 二.栈的实现方式 2.1 顺序栈 2.2 链栈 三.顺序栈的实现 定义顺序栈的结构 初始化 入栈 检查栈是否为空 出栈 销毁 四.链栈的实现 定义链栈的结构 初始…...

伺服增量式和绝对式的本质区别?

伺服增量式和绝对式的本质区别&#xff1f; 增量式编码器是将位移转换成周期性的电信号&#xff0c;再把这个电信号转变成计数脉冲&#xff0c;用脉冲的个数表示位移的大小。以转动时输出脉冲&#xff0c;通过计数设备来知道其位置&#xff0c;当编码器不动或停电时&#xff0c…...

应对 .DevicData-X-XXXXXXXX 勒索病毒:防御与恢复策略

引言 随着信息技术的快速发展&#xff0c;网络安全问题愈发严峻。勒索病毒作为一种恶性网络攻击手段&#xff0c;已成为企业和个人面临的重大威胁之一。尤其是 .DevicData-X-XXXXXXXX 勒索病毒&#xff0c;其通过加密用户数据并勒索赎金&#xff0c;给受害者带来了巨大的经济损…...

【代码随想录——数组——二刷】

数组 1. 二分查找(704) 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 1.1 二分法的第一种写法 我们定义 target 是在…...

spring-boot(4)

1.VueRouter安装与使用 2.状态管理VueX 3. 4. 5. 6....

深度学习模型:原理、架构与应用

深度学习(Deep Learning)是机器学习中的一个分支,基于人工神经网络的发展,尤其是多层神经网络的研究,使其在语音识别、图像处理、自然语言处理等领域取得了显著进展。深度学习的核心是通过大量数据的训练,学习到数据的内在结构和模式,并且具备自动从复杂的输入中提取特征…...

玩客云Armbian安装Casaos

#armbian安装docker apt install docker.io #armbian判断docker是否正常运行 systemctl status docker #查看版本 docker version #安装casaos方式一 wget -qO- https://get.casaos.io | bash #安装casaos方式二 curl -fsSL https://get.casaos.io | bash...

redis过期提醒

文章目录 redis过期提醒 redis过期提醒 有一次看redis的配置文件发现一个notify-keyspace-events配置&#xff0c;注释里边长篇大论的&#xff0c;那我得看看这是干啥的&#xff0c;看完注释内容&#xff0c;发现不得了了&#xff0c;redis竟然还有过期提醒的功能 接下来得大…...

AnaTraf | 提升网络性能:深入解析网络关键指标监控、TCP重传与TCP握手时间

AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 在当今的数字化时代&#xff0c;网络的稳定性和性能对企业的运营效率至关重要。无论是内部通信、应用程序的运行&#xff0c;还是对外提供服务&#xff0c;网络都发挥着关键作用。对于网络工程师或IT运维人员…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...