mysql的带有行锁查询时,结果数据为空是否会导致锁表?

文章详细阐述了MySQL中InnoDB引擎的行锁机制。当使用带锁的查询时,如果查询条件匹配到唯一的索引并且数据存在,才会对相应行加锁;否则,如果数据不存在,不会产生锁,也不会锁住整个表。通过两个事务场景的演示,证明了这一行为。
摘要由CSDN通过智能技术生成

开头先说结果mysql带锁查询数据时,若结果数据不存在,也不会导致锁表;

验证如下:

1.mysql使用innodb引擎时,才会有行锁概念;

2.mysql实现行锁的原理实际不是索数据,是索对应的索引;

3.若带索查询且条件字段有唯一索引时,如果查询到数据则是将对应结果加锁,如果没有查询到数据,则不会加锁,也不会锁表;

如下验证:

场景1:带锁查询有数据的表

事务1:带锁查询用户表

事务2:也带锁查询该条数据

 

事务则拿不到对应的锁,会等待事务1释放id为1的数据行锁后,才能拿到锁如下

事务1 提交处理

 

 事务2再次带锁查询

 场景2:带行锁查询结果为空是否会锁表?

事务1:带锁查询,结果不存在时

 事务2:带锁查询id为1的数据

 结果是能拿到锁的,所以可以证明,mysql带锁查询数据时,若结果数据不存在,也不会导致锁表;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值