Oracle——关于for update的锁表与解锁

前传:

上周工作时,犯了件蠢事,select数据的时候加入了for update却忘记了加条件,测试环境的数据过多,查询时间太长,于是就把这个进程给kill了,结果造成了锁表。

结论:

for update语句一旦运行就会把表锁住,防止他人和你一同更改,第二个连接进来再进行select 。。。for update会造成阻塞,即第二个连接无法查询出数据。

在前传中,我将进程kill了,但是没有提交该事物,所以oracle认为,这个连接一直在修改数据,于是没有办法再执行for update语句。

但是for update锁住的只有符合条件的行,不符合该条件的行还是可以继续修改,比如:insert。

周末在家想重现这个事件,又不可能造大量的数据来造成当时查询时间过长的状况,于是,我想不commit直接关闭PL/SQL,但是无论如何都重现不了工作中的状况。

后来发现,PL/SQL有设定,当我们注销或者关闭PL/SQL的时候,默认提交事物,选项中只有“提交”、“回滚”和“询问”三个选项,所以当我们直接关闭PL/SQL的时候是很安全的。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值