阿尔梅勒 2021-12-13 17:41 采纳率: 25%
浏览 200

请问SQL里面FOR UPDATE加的锁,什么时候释放呢?

看到很多帖子说到,commit之后会释放锁。
但是这句话感觉很模糊。
拟举一个开发的业务场景
一个顺序号表中, 现在的顺序号是1, 要用到10个,处理完之后,将顺序号改成11。
正常的业务逻辑是。

1、第一步:获取顺序号,进行加锁
select num from a where type = 'oder_num' for update

返回的顺序号是1。
2、第二步:处理业务
处理了10个订单后,顺序号就是11了。
这时候将11回写到表中。

update a set num = 11 where type = 'oder_num'

业务结束!
在这个业务过程中,有以下几个问题。
1、这个过程中有没有释放锁?
2、如果有,在哪一步释放的?
3、如过没有,该如何进行释放?

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2021-12-13 18:15
    关注

    不同数据库情况会不一样。
    根据你的提问,建议你先搜索一下相关资料,了解一下什么是数据库事务;
    然后还要看数据库及该会话有没有设置自动commit。

    假定你这个过程处于事务中,而且没有自动commit,那么在你执行for update时,就加锁了,而且直到最后你都没有显式的执行"commit;"那么这个锁就没有被释放。
    如果没开事务,而且配置了自动commit,那么你第一步的锁马上就被释放了

    评论

报告相同问题?

问题事件

  • 创建了问题 12月13日

悬赏问题

  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错