select ( ) for update 锁行还是锁表?

news2025/4/7 4:02:43

select ( ) for update 锁行还是锁表?

一、验证

创建SQL表

//id为主键  
//name 为唯一索引
CREATE TABLE `user` (
 `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
 `name` VARCHAR ( 255 ) DEFAULT NULL,
 `age` INT ( 11 ) DEFAULT NULL,
    `code` VARCHAR ( 255 ) DEFAULT NULL,
 PRIMARY KEY ( `id` ),
    KEY `idx_age` ( `age` ) USING BTREE 
) ENGINE = INNODB AUTO_INCREMENT = 1570068 DEFAULT CHARSET = utf8

需要关闭自动提交,通过set @@autocommit=0; 设置为手动提交。0代表手动提交,1代表自动提交。
在这里插入图片描述

二、 结合例子进行验证

(1):

使用主键id为条件去查询,然后开启另一个事务去更新数据,
更新被阻塞,加锁了,锁定要查询的id为1的行数据。

第一个事务,并且没有提交事务。
第二个事务,去更新数据,被阻塞了,且由于长时间拿不到锁报错。

(2):

我们在开启一个事务对另一条id为2的数据进行更新

(3):

一开始的创建表就age创建了唯一索引

(4):

使用普通的字段code去操作,另一个事务我去更新另外一条数据,
如果我更新成功了,就是锁行,失败了就是锁表。

三、结果及其内容解释

最后得出结论:
1、如果查询条件用了索引/主键,那么select … for update就会进行行锁。
2、如果是普通字段(没有索引/主键),那么select … for update就会进行锁表。

select查询语句是不会加锁的,但是select …for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。
那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。
没用索引/主键的话就是表锁,否则就是是行锁。

下面补充一下悲观锁的内容:

什么是悲观锁呢?
当我们要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发的发生。

为什么叫做悲观锁呢?因为这是一种对数据的修改抱有悲观态度的并发控制方式。我们一般认为数据被并发修改的概率比较大,所以需要在修改之前先加锁。
数据库中的行锁,表锁,读锁,写锁,以及 syncronized 实现的锁均为悲观锁。
在这里插入图片描述

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

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

相关文章

SpringCloud微服务项目实战 - 6.延迟任务

我没有失约,我与春风共至,我与夏蝉共鸣,我与秋叶共舞,我与凛冬共至,唯独你背道而行! 系列文章目录 项目搭建App登录及网关App文章自媒体平台(博主后台)内容审核(自动)延迟任务 - 精…

JVM快速入门学习笔记(一)

参考: https://blog.csdn.net/m0_38075425/article/details/81627349 www.kuangstudy.com JVM 常问面试题 请你谈谈你对JVM的理解? java—>class---->Java8虚拟机和之前的变化更新?什么是OOM 内存溢出什么是栈溢出StackOverFlowErr…

Matplotlab绘制散点图小节

前言现有一堆数据,是散点坐标形式,现在需要将它们绘制成散点图,并解决了关于Matplotlib绘图不能显示汉字的问题。读取数据数据格式如下图。第一行为一个数字,表示当前文件共有多少行数据。 第二行开始为真正的数据,各数…

如何冻结Excel中的行

在Excel中有一个冻结行的功能。在冻结行的帮助下,我们可以固定我们选择的窗格或行,以超出特定的限制工作表。 可以从“视图”菜单选项卡的“窗口”部分的“冻结窗格”下拉列表中访问“冻结行”。首先,要冻结列,请选择要冻结的列或将光标放在该列的任何位置,然后从列表中选…

vue 使用hook 对 chekbox 做简单的逻辑抽离,一个核心多套模板

现在的组件库都会包含些相同的基础组件,功能大差不差,只是不同UI规范下的具体实现。这些基础组件基本能满足大部分的开发需求。 但世上无银弹,有时我们需要对组件做细微的调整可能是功能上的,可能是UI上的,例如 tab切换…

JavaWeb基础(三) Request和Response详解

JavaWeb基础(三) Request和Response详解 1,Request和Response的概述 Request是请求对象,Response是响应对象。 此时,我们就需要思考一个问题request和response这两个参数的作用是什么? request: 获取请求数据 浏览器会发送HTTP请求到后台…

跨站脚本攻击漏洞(XSS)-基础篇

数据来源 跨站脚本攻击 1、什么是跨站脚本攻击? 跨站脚本( Cross-site Scripting)攻击,攻击者通过网站注入点注入客户端可执行解析的 payload(脚本代码),当用户访问网页时,恶意 payload自动加载并执行,…

索引(index)

索引(index) 1、什么是索引: 索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。一张表的一个字段可以添加一个索引,当然多个字段联合起来也可以添加索引,索引相当于一本书的目录&#xf…

Spring Boot 3 步完成日志脱敏,简单实用!

在我们写代码的时候,会书写许多日志代码,但是有些敏感数据是需要进行安全脱敏处理的。 对于日志脱敏的方式有很多,常见的有: 使用conversionRule标签,继承MessageConverter 书写一个脱敏工具类,在打印日志…

springboot+mybatisplus实现分页

在日常开发中,多记录的列表查询可能会遇到分页处理的场景,在springboot项目中传统是引入mybatis组件进行持久化,然后通过pagehelper组件进行分页实现。下面体验一下在springboot项目中引入mybatisplus组件,通过其自带分页插件实现…

cpu简述--指令集架构

很多初级开发者其实都对cpu了解不多,个人兴趣原因想要了解一下cpu的相关知识,所以开几篇文章记录一下吧。 2002年8月10日,中国科学院计算技术研究所的青年科学家胡伟武带领研制组,研制出我国首枚拥有自主知识产权的通用高性能微处理芯片——“龙芯一…

MindOpt安装配置教程(Windows系统)

1 前言 官网有很多的说明文档、教程,但是可能有些地方(这里仅仅补充安装配置部分,其他操作建议自行去官网进行探索)不是很详细,踩了一些坑,所以进行了一些总结。 2 下载安装 url:求解器SDK下载…

Nginx基础02:配置文件nginx.conf(Part1)

我们使用Nginx主要是通过其配置文件nginx.conf来实现的。按照一定的规则,编写特定的指令,可以帮助我们实现对Web服务的控制!所以,学习Nginx的用法,几乎就是学习nginx.conf!如何使用本篇文章本文作为一篇高度…

【博客590】iptables raw表的特殊作用

iptables raw表的特殊作用 1、iptables四表五链: 2、raw表的优先级 从上图中可以看到raw表作用于prerouting和output链,且在这两个链中的几个表中拥有最高优先级,并且是高于连接跟踪的,这个也是raw表用于优化性能的一个重要前提 …

Leetcode链表专题专练-万字总结

文章目录 系列:链表专练 语言:java & go 题目来源:Leetcode 常考点: 单链表 & 双链表 &双指针 思路和参考答案文章目录链表专题总结链表专练链表专题总结 链表是一种通过指针串联在一起的线性结构,每一个…

【计算机网络】传输层协议-------TCP详解

文章目录1. TCP 协议概述2. TCP原理2.1 保持可靠性的机制2.1.1 确认应答2.1.2 超时重传2.1.3 连接管理机制(安全机制)2.1.3.1 三次握手2.1.3.2 四次挥手2.1.4 滑动窗口2.1.5 流量控制2.1.6 拥塞控制2.1.7延时应答2.1.8 捎带应答2.1.9 粘包问题2.1.10 TCP异常2.1.11 TCP vs UDP1…

记录每日LeetCode 112.路径总和 Java实现

题目描述: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶…

马蜂窝如何利用 APISIX 网关实现微服务架构升级

作者:董红帅,马蜂窝微服务体系建设以及基础服务能力建设专家。 马蜂窝作为旅行社交平台,是数据驱动的新型旅行电商。基于十余年的内容积累,马蜂窝通过 AI 技术与大数据算法,将个性化旅行信息与来自全球各地的旅游产品供…

Water Pamola通过恶意订单对电商发起攻击

自2019年以来,趋势科技的研究人员一直在追踪一个被称为“Water Pamola”的攻击活动。该活动最初通过带有恶意附件的垃圾邮件攻击了日本、澳大利亚和欧洲国家的电子商务在线商店。 但是,自2020年初以来,研究人员注意到Water Pamola的活动发生…

(二十三)Collecttion集合

目录 前言: ①Collecttion集合的体系结构 ②Collecttion集合的遍历方式 方式一:迭代器 方式二:foreach/增强for循环 方式三:Lambda表达式 ③常见数据结构 前言: Collection: 是所有集合的顶级接口,里面规定了集合操作元素的相关功能方法集合与数组一样,用于存储一组…