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

请问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日