1. 程式人生 > >oracle PL/SQL-FOR UPDATE 與 FOR UPDATE OF的區別

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語句結束為止。

因為FOR   UPDATE子句獲得了鎖,所以COMMIT將釋放這些鎖。當鎖釋放了,該遊標就無效了。