select......for update会锁表还是锁行?

spring boot maven打包jar包太大,怎么办?这个方法解决你的烦恼 在springboot maven项目中,有两种打包方式,一种是war包,一种是jar,今天我们讲一下jar的打包方式。但是在jar包打包只要我们发现,我们的项目jar太大了,每次上传到服务器的时候非常的慢,接下来我们就来解决一下这个问题,让jar包也能先war包一样,不用每次都上传那么大的jar。 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:blog.youkuaiyun.com/qq_42956376/
article/details/109544539

e39aed7b7c5cd24163bc2e182d8e36a3.png


select查询语句是不会加锁的,但是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代表自动提交。

35ff6add3c2b84ef3d33391e4de98238.png

推荐下自己做的 Spring Boot 的实战项目:

https://github.com/YunaiV/ruoyi-vue-pro

结合一下实例验证

实例1:

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

  • 图一为第一个事务,并且没有提交事务

  • 图二为第二个事务,去更新数据,被阻塞了

  • 图三为第二个事务,长时间拿不到锁报错。

613ca8354930903d38a1bdf315059cc9.png 44b020d9672472c4b8d285dfbfed256d.png 8d540486647258088ce1fa47eb9d0e2b.png

实例2:

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

d12cff96933de8b6e80932d55c6d3b30.png beba59b59e96fbbd8582b7c14fea3f4a.png

实例3(索引):

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

53ba07db155d8faf784db8fa7154ff0b.png b08deae94e2d9792928c57dfd56ac246.png fc47cc88b3040862decde55f7604402b.png

实例4:

使用普通的字段code去操作

8352e6eaf22aef321bf034b4cc1a843d.png 0520b719325658bdd18b7f2de3c8220a.png 32ad07949c53d463631c03351b3d42bb.png

另一个事务我去更新另外一条数据,如果我更新成功了,就是锁行,失败了就是锁表。

a147c00368c72cfeb5c3ee198809d577.png 443edeb460f6f1906f9cc0988845bd2e.png

推荐下自己做的 Spring Cloud 的实战项目:

https://github.com/YunaiV/onemall

结果:

如果查询条件用了索引/主键,那么select ..... for update就会进行行锁。

如果是普通字段(没有索引/主键),那么select ..... for update就会进行锁表。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

7f8e18e2d7e380398e8d10f920e88776.png

已在知识星球更新源码解析如下:

2edc2838d73aa0c9459cc4db5a90a691.png

858ef2b115efe43e05cd1e96e807b162.png

55c6db4d1e4f9d321e349a00eaa726df.png

647a46dbb6aefd7737ac694b0881c7a2.png

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Maven使Jar包缩小上百分倍的方法详解 maven打包在实际部署的时候是一个非常头疼的事情,jar太大导致上传时间很慢,今天我们就来出一个优化jar的好方法。分布式项目我们一般会采用Maven管理,整体架构分为三部分:三方依赖:通过pom.xml文件配置,添加到项目中来特点:变化小,占用空间大静态资源:特点:变化适中,占用空间大;不过一般的静态资源都另外管理,很少会直接放在项目里面业务代码:特点:变化大,占用空间小整个项目打包会被构建成一个Jar包,其中三方依赖也会被构建进去,占用空间最大的也是这个pom.xml文件,也就是大家通常说的。... 阅读详情

相关推荐

springboot整合druid 监控sql

springboot整合druid 监控sql 包括去除广告教程

一名代码爱好者的博客 1593

晒一晒程序员桌面,你惊呆了没?

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~...

芋艿V 866

Select...For Update:行锁还是表锁

在数据库操作中,锁定机制是确保数据一致性和完整性的关键手段。其中,SELECT...FOR UPDATE语句在数据库事务处理中扮演着重要角色,它能够在读取数据的同时对数据进行加锁,以防止其他事务对数据进行修改或删除。然而,关于SELECT...FOR UPDATE到底加的是行锁还是表锁,不少开发者存在疑惑。本文旨在详细解析这一问题。

wjianwei666的专栏 505

MyBatis连接数太多报错问题:message from server:“Too many connections“

话不多说,直接干货! 第一步: 在navicat里面使用命令: show variables like '%max_connections%'; 此处是我已经修改好了以后才显示1500,如果未设置默认是100,因此一般线上服务都需要修改此配置 第二步: 继续执行: set persist max_connections=1500; 由此即可修改成功.但千万不能漏了第三步!!! 第三步: 去对应的mysql部署的服务器查看mysql的端口号 紧接着就是重启mysql,即...

weixin_46816552的博客 1510

带硬约束的物理信息神经网络(PINN with Hard Constraint)示例及代码

本文以一个案例介绍了带硬约束的物理信息神经网络的原理及实现步骤。

m0_72768523的博客 5357

从0开始部署基础的AlwaysOn

在这个快餐文化盛行的时代,应该没多少人真的会沉下心来看理论和具体步骤,加上我自己也需要一篇可以扩展的快速搭建环境的指引,所以特别写了这篇文章。 我们在这里要做的事情有以下几个:安装环境。包括虚拟机和网络配置等。安装Windows域、配置必要的账号密码及功能。搭建域环境并进行配置。安装配置Windows Server Failover Cluster(WSFC)。安装SQL Server。配置Alw

MVP黄钊吉(發糞塗牆) 7568

select......for update会锁表还是锁行。

select查询语句是不会加锁的,但是select for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。 没用索引/主键的话就是表锁,否则就是是行锁。 验证: 建表sql //id为主键 //name 为唯一索引 CREATE TABLE `user` ( `id` INT ( 11 ) NOT NULL AUTO_INCREMENT, `name` VARCHAR ( 255 ) DEFAULT NULL, .

qq_42956376的博客 1万+

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距 关键词:语音提示盲人拐杖 整点报时 超声波测距拐杖

LS840233684的博客 2047

select...for update会锁表还是锁行

select...for update会锁表还是锁行

小学生波波 3406

主流 AI 插件 之一的 Copilot 介绍

Copilot 是微软推出的一款人工智能助手,旨在通过自然语言交互帮助您提升工作效率和创造力,覆盖多平台,提供智能问答、内容生成、代码辅助等功能。其核心定位为“日常 AI 伴侣”,旨在通过自然语言交互提升工作与生活效率。

u014695938的博客 6893

RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)

本文记录的是利用中的模块优化的目标检测网络模型。通过局部特征提取器、周围环境提取器、联合特征提取器和全局环境提取器来提取局部特征、周围环境和全局环境信息,充分利用不同层次的信息。本文将其应用到中,并进行二次创新,使网络能够更好的处理多类别目标的分类能力。CGNet: A Light-Weight Context Guided Network for Semantic Segmentation1️⃣ 首先通过局部特征提取器floc(∗)floc(*)floc(∗)和周围环境提取器fsur(∗)f_{sur }

Limiiiing的博客 1350

SELECT ... FOR UPDATE 到底是锁表还是锁行?

对于 SELECT …FOR UPDATE 我们知道除了有查询的功能外,还会对查询结果进行加锁,而且是悲观锁。OK,数据都准备好了!让我们通过下边三个场景来简单说明下 FOR UPDATE 到底是「行锁」还是「表锁」。由于 name 不是主键也没加索引,所以是表锁,所有数据此时都不能 update。只锁定 code=007 的数据,行锁,此时除该条数据以外都允许 update。只锁定 id=1 的数据,行锁,此时除该条数据以外都允许 update。WHERE 中使用带索引的字段。WHERE 中使用主键。

cab5的博客 1920

【图像超分】论文复现:轻量化超分 | 残差特征蒸馏网络RFDN的Pytorch源码复现,跑通源码,整合到EDSR-PyTorch中进行训练,补充CCA的实现!

本文介绍了将RFDN(残差特征蒸馏网络)整合到EDSR-PyTorch框架中的实现过程。主要内容包括:1)环境配置与数据集准备;2)测试源码提供的x4预训练模型,并通过修改图像裁剪函数解决HR与SR尺寸不一致问题;3)训练过程详解,包括将RFDN源码模块整合到EDSR框架中,调整模型参数输入方式。文章还提供了完整的代码实现、训练好的模型权重下载链接,并对RFDN架构进行了详细拆解与注释。通过将RFDN与EDSR相结合,实现了轻量级图像超分辨率重建,获得了PSNR/SSIM等指标及可视化结果。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 432

select for update行锁or表锁,20个场景分析,还真得看情况

对于软件或框架来说,特别是在有大版本更新的情况下,脱离了具体版本的结论往往是无意义的。此时,数据库一共加了8把锁,一把表级别的IX意向排他锁,6把基于主键的针对数据记录(总共6条)的X锁,一把针对记录的supremum pseudo-record锁。通过上面的结论,我们可以看出,并不是简单的说“有索引就是行锁,无索引就是表锁”,因为在事务隔离级别为RC时,无索引,同样表现(被优化)为行锁。此时,可以看到四把锁,一把表级别的IX锁,一把基于普通索引的X排他锁,一把基于主键的行级排他锁,一把基于普通索引的。

jj1245_的博客 1494

《AgentScope-Java 深入浅出教程》第3章 消息系统(Message)

在 AgentScope 中,消息(Msg)是最核心的数据结构。│ 消息的作用 ││ ││ │ 用户输入 │ ────────────┐ ││ ▼ ││ │智能体通信│ ◄────► │ 消息对象 │ ◄────► │ LLM API │ ││ ▲ ││ │ ││ │ 历史存储 │ ────────────┘ ││ │用户输入:封装用户的问题和指令智能体输出:封装智能体的回复和工具调用智能体通信:在多智能体系统中传递信息LLM API 交互:转换为 LLM 可理解的格式历史存储。

步子哥的博客 228

第3.4章 机器人第三方库实战总结(四):G2O优化库从入门到实战(附SLAM实例代码)

自定义边同样是满足复杂应用需求的重要手段。自定义边时,需要明确边所连接的顶点类型以及边所表示的误差项的计算方式。假设我们要定义一条边,用于约束两个上述自定义顶点之间的相对位姿和传感器偏移量关系。我们可以这样定义边类:public:// 计算误差// 计算雅可比矩阵// 读盘和存盘函数,这里暂不实现。

行知SLAM 358

面试官问:select......for update会锁表还是锁行?

点击关注公众号,实用技术文章及时了解select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。那么它加的是行锁还...

Java知音 2683

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

select......for update 会锁表还是锁行?

select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。 没用索引/主键的话就是表锁,否则就是是行锁。 验证: 建表sql //id为主键 //name为唯一索引 CREATETABLE`user`( `id`INT(11)NOTNULLAUTO_INCREMENT, `name`VARCHAR(255)DEFAULTN...

qq_24466549的博客 2675

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

select for update是行锁还是表锁,还真得看情况

对于软件或框架来说,特别是在有大版本更新的情况下,脱离了具体版本的结论往往是无意义的。此时,数据库一共加了8把锁,一把表级别的IX意向排他锁,6把基于主键的针对数据记录(总共6条)的X锁,一把针对记录的supremum pseudo-record锁。通过上面的结论,我们可以看出,并不是简单的说“有索引就是行锁,无索引就是表锁”,因为在事务隔离级别为RC时,无索引,同样表现(被优化)为行锁。此时,可以看到四把锁,一把表级别的IX锁,一把基于普通索引的X排他锁,一把基于主键的行级排他锁,一把基于普通索引的。

程序新视界 3962

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

select……for update到底是加了行锁,还是表锁?

select……for update到底是加了行锁,还是表锁?

一只苟延残喘的卑微蝼蚁 266

mysql行锁、表锁小实验------select for update

来建一个表: CREATE TABLE `a` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `x` int(10) unsigned NOT NULL, `y` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `idx_x` (`x`) ) ENGINE...

认知 行动 坚持 2949
上一篇: 诞生近20年依旧炙手可热,国内最流行的开发框架,没有之一!
下一篇: 从代理机制到Spring AOP,这篇给你安排的明明白白的
公众号-芋道源码
博客等级 码龄10年 1631粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值