0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_ro2CN3Fa 来源:油锅里的猪 作者:油锅里的猪 2022-10-10 15:54 次阅读

验证

结合一下实例验证

结果

select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。

那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。

没用索引/主键的话就是表锁,否则就是是行锁。

验证:

建表sql

//id为主键
//name为唯一索引
CREATETABLE`user`(
`id`INT(11)NOTNULLAUTO_INCREMENT,
`name`VARCHAR(255)DEFAULTNULL,
`age`INT(11)DEFAULTNULL,
`code`VARCHAR(255)DEFAULTNULL,
PRIMARYKEY(`id`),
KEY`idx_age`(`age`)USINGBTREE
)ENGINE=INNODBAUTO_INCREMENT=1570068DEFAULTCHARSET=utf8

需要关闭自动提交,通过set @@autocommit=0; 设置为手动提交。0代表手动提交,1代表自动提交。

a25c28ce-3734-11ed-ba43-dac502259ad0.png

结合一下实例验证

实例1:

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

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

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

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

a26a62a4-3734-11ed-ba43-dac502259ad0.pnga27d446e-3734-11ed-ba43-dac502259ad0.pnga28c0e68-3734-11ed-ba43-dac502259ad0.png

实例2:

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

a2a3bb8a-3734-11ed-ba43-dac502259ad0.pnga2b864ae-3734-11ed-ba43-dac502259ad0.png

实例3(索引):

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

a2cb457e-3734-11ed-ba43-dac502259ad0.pnga2e2d342-3734-11ed-ba43-dac502259ad0.pnga306f9fc-3734-11ed-ba43-dac502259ad0.png

实例4:

使用普通的字段code去操作

a31543a4-3734-11ed-ba43-dac502259ad0.pnga32f5eb0-3734-11ed-ba43-dac502259ad0.pnga33cf674-3734-11ed-ba43-dac502259ad0.png

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

a3517036-3734-11ed-ba43-dac502259ad0.pnga364ff20-3734-11ed-ba43-dac502259ad0.png

结果:

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4603

    浏览量

    67369
  • select
    +关注

    关注

    0

    文章

    28

    浏览量

    3880

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

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用STM32F0控制BLDC电机,需要在停机时对电机进行自,怎么实现?

    如题,使用STM32F0控制BLDC电机,需要在停机时对电机进行自,不外加机械部件。施加其中一相一定电压时要保持电机卡住不动的状态,但手动转动电机超过一定角度时,还是保持不了原位。有什么办法比较好呢?
    发表于 04-16 08:12

    如何解决蓝牙协议栈被问题?

    如何解决蓝牙协议栈被问题
    发表于 03-21 08:21

    Tasking误操作导致MCU被怎么解决?

    start-up mode 为Generic Bootstrap Loader或者ASC Bootstrap Loader导致MCU被,请问MCU还能救回来吗?如果能需要怎么做,要重新刷机吗?
    发表于 02-20 07:03

    TC275 TC1.6P 步核(Checker)的功耗是非步核的百分之多少呀?

    TC275 TC1.6P 步核(Checker)的功耗是非步核的百分之多少呀?
    发表于 02-06 07:36

    TC212提示被的原因?怎么解决?

    TC212提示被了,使用DAP下载器链接,DAS能扫到但提示DEVICE_LOCKED,Memtool也提示连不上设备,但是下载器一直是亮着绿灯(没连接上显示红灯)
    发表于 02-06 07:28

    TC397不使能SWAP功能的情况下,对UCB_SWAP_ORIG/_COPY操作芯片吗?

    我想测试一下对UCB_SWAP_ORIG/_COPY的写入/擦除操作,请问在不使能SWAP的情况下,对芯片的这种操作是否片。
    发表于 02-05 08:04

    CMOS闩测试中的电流脉冲如何加上的?

    测试中进行电流注入测试时,管脚电压还不允许超多1.52倍最大电压,这个如何做到呢?注入的电流需要是在工作电流+100mA。
    发表于 02-04 07:29

    请问TC264步核有什么作用?

    TC264步核有什么作用?
    发表于 02-04 06:19

    双电压锂电池板问题

    日立 双电压锂电池板 怎么解锁
    发表于 12-20 08:42

    AD790的存引脚造成电流过大怎么解决?

    上面是其中文手册的写法。 我现在的用法是±15V供电,Vlogic为5V。 我将存脚直接接到5V,上电发现,AD790的温度突然就升了上去,而从我的供电电源也看到,我的5V电源输出电流一下
    发表于 11-20 06:41

    select语句的基本语法

    SELECT语句是SQL(Structured Query Language,结构化查询语言)中的一种查询语句,用于从数据库中检索数据。它是数据库操作中最常用和基本的语句之一。在本文中,我将为您详尽
    的头像 发表于 11-17 16:23 1001次阅读

    存器的作用是什么?

    数码管的动态显示截取了部分程序,使用了74hc573存器,但是我觉得去掉存器程序照样可以执行,那么这里使用存器的意义是什么呢?还是说只是用一下没有什么特殊的含义? for( i=
    发表于 10-26 07:18

    STM32闩

    最近在使用STM32时经常发生3v3与地短路的情况,听说是什么闩的原因,请问这个怎么解锁呀,可以解吗
    发表于 10-21 22:34

    使用单片机设计电子密码

    本课程设计题目是基于单片机的电子密码,由单片机控制程序结合LCD1602显示器实现密码输入、密码显示、密码比较处理功能。本课程设计可学习矩阵按键扫描输入、LCD1602显示器的显示、密码对比处理的设计方法。
    发表于 09-26 07:52

    射频感应控制器设计实例

    近年来随着射频IC卡技术在各领域的应用日趋成熟和广泛, 采用射频卡为钥匙的射频感应电,因独具操作方便、安全性能高等特点,已在新 型电控锁具中占有了举足轻重的地位。本文介绍的感应控制器,力求符合
    发表于 09-22 06:16