oracle PL/SQL-FOR UPDATE 與 FOR UPDATE OF的區別
PL/SQL-FOR UPDATE 與 FOR UPDATE OF的區別
資料庫 oracle for update of 和 for update區別
select * from TTable1 for update 鎖定表的所有行,只能讀不能寫
2 select * from TTable1 where pkid = 1 for update 只鎖定pkid=1的行
3 select * from Table1 a join Table2 b on a.pkid=b.pkid for update 鎖定兩個表的所有記錄
4 select * from Table1 a join Table2 b on a.pkid=b.pkid where a.pkid = 10 for update 鎖定兩個表的中滿足條件的行
5. select * from Table1 a join Table2 b on a.pkid=b.pkid where a.pkid = 10 for update of a.pkid 只鎖定Table1中滿足條件的行
for update 是把所有的表都鎖定
for update of 根據of 後表的條件鎖定相對應的表
-----------
關於NOWAIT(如果一定要用FOR UPDATE,我更建議加上NOWAIT)
當有LOCK衝突時會提示錯誤並結束STATEMENT而不是在那裡等待(比如:要查的行已經被其它事務鎖了,當前的鎖事務與之衝突,加上nowait,當前的事務會結束會提示錯誤並立即結束 STATEMENT而不再等待).
如果加了for update後 該語句用來鎖定特定的行(如果有where子句,就是滿足where條件的那些行)。當這些行被鎖定後,其他會話可以選擇這些行,但不能更改或刪除這些行,直到該語句的事務被commit語句或rollback語句結束為止。