MySql For Update随便写写

MySql中的select … for update 是什么呢?

可以理解为, 执行select 语句前, 在查询的行上加锁。

  1. 所以我们可以理解为, 加上for update查询出来的数据就是当前最新的数据,因为其他事务线程的更新操作都会被阻塞住。 接下来验证下。

第一步:开启事务。
在这里插入图片描述
第二步:id=8的行数据执行select … for update
在这里插入图片描述
第三步:就看看事务1对 id != 8 的数据进行更新是否成功。
在这里插入图片描述
第四步: 更新id=8的那行数据,因为事务2的for update对id=8的行数据上锁了, 所以更新不了。
在这里插入图片描述
第五步:提交事务2, 事务1更新id=8的行数据,更新成功。
在这里插入图片描述

接下来我又有个疑惑, 当select … for update 超过一定数据时候, 会不会选择直接全表锁定? 我猜测会。 接下来验证下。

这是全表数据,同时给age字段加上了索引。众所周知,未加索引字段作为where条件update更新时会导致全表锁定。
在这里插入图片描述

  1. 先执行事务2的for update, age=20的全部数据肯定被锁定了, 当事务1对age=18的行数据更新的时候, 也获取不到锁, 说明当select for update 超过一定比例后就会进行全表锁定。
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值