关于for update的几个误解(一)

初学sql开发的同学经常会在plsql developer中使用for update来修改表中记录,

然后被经验丰富一点的老鸟教导这个方法不如rowid修改好,于是摒弃了for update的语法。

事实上,对于for update我们可能存在不少误解。

误解1.for update是表级锁


SESSION1对表T_HOLIDAY的一行SELECT .... for update,可以看到在表级别是3号行独占锁;此时在SESSION2对该行进行UPDATE、DELETE操作会被BLOCK


而在SESSION3种对另外的行做UPDATE、DELETE操作并无影响


因此,FOR UPDATE操作对表是加行独占锁,只影响SELECT选中的行。


误解2.用SELECT ROWID...比SELECT... FOR UPDATE更安全

下图SESSION133正试图对表中1条记录进行修改;


此时在表或记录上并没有任何锁,另一个用户在SESSION68对该记录的FLAG和REMARK两个字段做了修改,并commit成功。


接着SESSION133用户也对该记录做了修改,修改完成后,他发现REMARK的值变成自己修改的新值,而FLAG却莫名其妙也变了。他不知道的是SESSION68的用户对REMARK字段的修改完全被他略过了。


因此,在多用户操作的环境里,用ROWID修改数据才是更危险的行为。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值