Oracle 的for update行锁

本文深入解析SQL中的FORUPDATE WAIT语句,包括其语法、优点以及在不同场景下的应用。通过理解FORUPDATE WAIT,开发者能更有效地控制数据库并发操作,避免无限期等待,提高应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT...FOR UPDATE 语句的语法如下:
SELECT ... FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED];

其中:
OF 子句用于指定即将更新的列,即锁定特定列的相关的表的行。
WAIT 子句指定等待其他用户释放锁的秒数,防止无限期的等待。

使用“FOR UPDATE WAIT”子句的优点如下:
1.防止无限期地等待被锁定的行;
2.允许应用程序中对锁的等待时间进行更多的控制;
3.对于交互式应用程序非常有用,因为这些用户不能等待不确定;
4.若使用了skip locked,则可以越过锁定的行,不会报告由wait n 引发的‘资源忙’异常报告。

注意:
1.for update nowait和 for update 都会对所查询到得结果集进行加锁,所不同的是,如果另外一个线程正在修改结果集中的数据,for update nowait 不会进行资源等待,只要发现结果集中有些数据被加锁,立刻返回 “ORA-00054错误,内容是资源正忙, 但指定以 NOWAIT 方式获取资源”。
2.of子句在牵连到多个表时,具有较大作用,如不使用of指定锁定的表的列,则所有表的相关行均被锁定,若在of中指定了需修改的列,则只有与这些列相关的表的行才会被锁定。

转载于:https://www.cnblogs.com/lynnwang/p/4394821.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值