开头先说结果:mysql带锁查询数据时,若结果数据不存在,也不会导致锁表;
验证如下:
1.mysql使用innodb引擎时,才会有行锁概念;
2.mysql实现行锁的原理实际不是索数据,是索对应的索引;
3.若带索查询且条件字段有唯一索引时,如果查询到数据则是将对应结果加锁,如果没有查询到数据,则不会加锁,也不会锁表;
如下验证:
场景1:带锁查询有数据的表
事务1:带锁查询用户表
事务2:也带锁查询该条数据
事务则拿不到对应的锁,会等待事务1释放id为1的数据行锁后,才能拿到锁如下
事务1 提交处理
事务2再次带锁查询
场景2:带行锁查询结果为空是否会锁表?
事务1:带锁查询,结果不存在时
事务2:带锁查询id为1的数据
结果是能拿到锁的,所以可以证明,mysql带锁查询数据时,若结果数据不存在,也不会导致锁表;