前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三言两语记录mysql for update锁

三言两语记录mysql for update锁

作者头像
宣言言言
发布2020-11-30 10:17:28
1.6K0
发布2020-11-30 10:17:28
举报
文章被收录于专栏:宣言(Siam)博客宣言(Siam)博客

FOR UPDATE

中文直译的意思是:用于更新。

理解:这次查询的数据我要用于更新操作,所以麻烦Mysql帮我加锁,其他进程在我更新完成之前不能发起for update请求(可以发起普通select请求, 用于前端展示)

用途:防止高并发情况下,比如用户连续快速点击两次购买,导致商品数量超卖 为负数等情况

必要条件

  • mysql innodb引擎
  • 在事务中启用for update(直到commit 或者rollback 此次更新操作结束 释放锁)
  • mysql暂无for update nowait 需要封装,增加控制超时时间的逻辑,这样子伪nowait
  • select命中索引或者主键,则为行锁,没有命中则为表锁(需要注意 避免影响业务)

测试步骤

1.一个连接A 发起事务,执行select for update

代码语言:javascript
复制
START TRANSACTION;
select * from test where  id = "Auth" for update;

2.另一个连接B 发起普通select请求,正常返回结果

3.连接B 发起select for update请求,由于第一个步骤的事务还没有结束,所以不能获取,会一直堵塞,直到超时 或者锁被释放后返回

4.没有nowait 可以封装如下逻辑

代码语言:javascript
复制
function testNowait(){
    // 执行sql  超时时间更改为0.5s
    // 执行for update
    // 0.5s后则返回失败(默认可能长达1分钟)
    // 恢复为默认的超时时间,避免影响其他sql执行
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FOR UPDATE
  • 必要条件
  • 测试步骤
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档