如果在事务中使用update语句更新但是条件中没有使用主键,会使用什么级别的锁?

news2024/9/23 21:25:28

在 MySQL 的 InnoDB 存储引擎中,当使用 UPDATE 语句更新数据时,即使条件中没有使用主键,InnoDB 仍然会使用行级锁,而非表级锁。具体的锁定行为和锁的范围取决于查询条件及其选择性。

更新操作的锁定行为

在事务中执行 UPDATE 语句时,InnoDB 会对符合条件的行记录加上排他锁(X 锁)。如果查询条件没有使用主键或唯一索引,InnoDB 会扫描表中的所有行,并对符合条件的行加锁,而不是直接锁住整个表。

锁定范围

  1. 使用主键或唯一索引

    • 如果条件中使用了主键或唯一索引,InnoDB 会通过索引快速定位到需要更新的行,并只对这些行加锁。
  2. 不使用主键或唯一索引

    • 如果条件中没有使用主键或唯一索引,InnoDB 需要进行全表扫描,找到所有符合条件的行,并对这些行加锁,导致可能的性能损耗。

示例

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

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    department VARCHAR(100),
    salary DECIMAL(10, 2),
    INDEX (department)
) ENGINE=InnoDB;
情况一:条件中使用主键
-- 使用主键更新
UPDATE employees SET salary = salary * 1.1 WHERE id = 1;

在这种情况下,InnoDB 会通过主键索引快速定位到 id = 1 的行,并对该行加上排他锁。

情况二:条件中使用非主键索引
-- 使用非主键索引更新
UPDATE employees SET salary = salary * 1.1 WHERE department = 'Sales';

在这种情况下,InnoDB 会通过 department 索引扫描所有 department = 'Sales' 的行,并对这些行加上排他锁。

情况三:条件中不使用索引
-- 不使用索引更新
UPDATE employees SET salary = salary * 1.1 WHERE name = 'John';

在这种情况下,InnoDB 需要进行全表扫描,找到所有 name = 'John' 的行,并对这些行加上排他锁。

总结

  • 使用主键/唯一索引:通过索引定位记录,并加行级锁。
  • 不使用主键或唯一索引:全表扫描,找到符合条件的记录后加行级锁,但可能影响性能,尤其在数据量较大时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业上云不迷茫,香港电讯助力企业上云全攻略

在全球政策和市场双重驱动下,云计算产业正迎来前所未有的增长浪潮。据中国信通院《云计算白皮书(2023年)》1显示,2022年全球云计算市场规模已达到4,910亿美元,同比增长率高达百分之十九。而在中国市场,这一…

带线无人机现身俄罗斯抗干扰技术详解

带线无人机在俄罗斯的出现,特别是其光纤制导技术的应用,标志着无人机抗干扰技术的一大进步。以下是对俄罗斯带线无人机抗干扰技术的详细解析: 一、带线无人机抗干扰技术背景 技术突破:俄军成功研发了光纤制导无人机,…

数据链路层协议 —— 以太网协议

目录 1.数据链路层解决的问题 2.局域网通信方式 以太网 令牌环网 无线局域网 3.以太网协议 以太网帧格式 对比理解Mac地址和IP地址 认识MTU MTU对IP协议的影响 MTU对UDP的影响 MTU对TCP的影响 基于以太网协议的报文转发流程 交换机的工作原理 4.ARP协议 ARP协议…

springboot+vue高校两校区通勤校车预约系统的设计与实现

目录 用户功能管理员功能系统实现截图技术介绍核心代码部分展示使用说明详细视频演示源码获取 用户功能 登录注册:允许用户创建账户并登录系统。 首页:展示系统主要功能和通勤车相关的重要信息。 个人中心:用户可以查看和编辑自己的个人信息…

ios swift5 UITextView占位字符,记录限制字数

文章目录 截图代码:具体使用代码:CustomTextView 截图 代码:具体使用 scrollView.addSubview(contentTextView)contentTextView.placeholderLabel.text LocalizableManager.localValue("write_comment")contentTextView.maxCharac…

分享两个虚拟试衣工具,一个在线,一个离线,还有ComfyUI插件

SAM ,对不住了! 我没记错的话,OpenAI CEO,性别男,取向男,配偶男。 这又让我联想到了苹果CEO库克... 所以OpenAI和Apple可以一啪即合。 钢铁直男老马就和他们都不对付~~ 开个玩笑,聊…

以数赋能实景三维创新“科技+文旅”

在数字化时代,科技与文化的融合为我们带来了无限可能。今天,我们将探讨如何利用实景三维技术,推动“科技文旅”的创新发展。 1. 实景三维技术概述 实景三维技术,是一种集成了遥感、地理信息系统(GIS)、三…

量子计算如何引发第四次工业革命——解读加来道雄的量子物理观

在科技的历史长河中,人类经历了多次重大的技术变革:从第一次工业革命的蒸汽机到第三次计算机革命的互联网与半导体技术,每次技术革命都彻底改变了我们的生活。而如今,我们正处在第四次工业革命的前夕,其核心驱动力是量…

mybatis 配置文件完成增删改查(一):直接查询所有信息

文章目录 编写三步走查询所有编写接口方法编写sql语句执行方法,测试结果数据库字段名和实体类变量名不一致:ResultMap数据库字段名和实体类变量名不一致:方法二 编写三步走 编写接口方法:Mapper接口 参数有无 结果类型编写sql语句…

【Python】PythonRobotics:机器人算法的 Python 实现

在机器人技术的研究和开发中,理解和实现各种机器人算法是至关重要的。PythonRobotics 是一个开源项目,它提供了大量机器人算法的 Python 实现,这些算法覆盖了机器人科学的多个领域,包括定位、建图、导航、路径规划等。 ⭕️宇宙起…

nicegui标签组件lable用法深度解读和示例,源代码IDE运行和调试通过,截图为证

传奇开心果微博文系列 序言一、标签组件lable最基本用法示例1.在网页上显示出 Hello World 的标签示例2. 使用 style 参数改变标签样式示例 二、标签组件lable更多用法示例1. 添加按钮动态修改标签文字2. 点击按钮动态改变标签内容、颜色、大小和粗细示例代码3. 添加开关组件动…

美版iPhone 16 Pro完美改卡,15 Pro再见了

资深果粉应该都知道,从iPhone 14起,所有美版的iPhone,都从eSIM实体SIM,改成了全eSIM方案,彻底放弃了实体卡槽,这就给卡贴机这一行业造成了毁灭性的打击。 因为国内无法使用eSIM,即使有低价的美版…

什么是上层封禁海外流量

上层封禁海外流量(Upper-layer Blocking of Overseas Traffic)是一种网络安全策略,旨在通过在网络传输的上层进行流量控制和过滤,从而阻止来自海外的恶意流量或不必要的访问。这一措施主要用于防止分布式拒绝服务(DDoS…

C++笔记---set和map

1. 序列式容器与关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关…

数据驱动农业——农业中的大数据

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

win操作系统各个版本下载

MSDN, 我告诉你 - 做一个安静的工具站 (itellyou.cn) 下载地址链接转换工具 - 在线工具 (tool.lu) 通过这个网站可以再将ed2k转换成别的下载工具链接

LLM安全风险及应对

LLM安全风险主要从四个维度分析:用户输入、训练数据、模型本身以及工具和插件。 风险类别具体风险风险解释应对措施具体举例用户输入相关风险提示注入(Prompt Injection)攻击者通过设计特定输入,使模型生成恶意或不安全的输出。- …

进度调度切换

tips: 进程=内核数据结构(PCB/task_struct)+代码和数据 UID:每个用户对应的id 进程分类 & 进程关系 僵尸进程 父在子死 进程退出 代码不会再执行了,系统可以立即释放对应代码和数据进程…

推荐一款开源的Redis桌面客户端

TinyRDM 是一个现代化的、轻量级的跨平台 Redis 桌面客户端,能在 Mac、Windows 和 Linux 系统上使用。它有着现代化的设计风格,界面既简洁又清晰,操作起来方便又高效。不管是刚开始接触的新手,还是经验丰富的开发者,都…

【安装教程】Windows环境下Neo4j的安装与配置

【安装教程】Windows环境下Neo4j的安装与配置 Neo4j的概念一、安装前准备——JDK二、Neo4j的安装三、Neo4j的环境配置四、安装验证 Neo4j的概念 Neo4j 是一个高性能的图形数据库管理系统,它使用图形模型来存储和处理数据。Neo4j 的图形模型由节点和边组成&#xff0…