1. 程式人生 > >oracle中行級鎖與表級鎖

oracle中行級鎖與表級鎖

最近使用oracle時,如果併發狀態插入資料則會造成資料重複,這時候需要使用oracle的鎖機制,下面是常用的oracle鎖表方法。

一、行級鎖: 
(下面這句將給該表的所有行都加上鎖) 
select * from person for update;

如果該行記錄已經被鎖定,就不用等待,系統會直接拋錯 ora-00054 
select * from person  where id = '1'  for update nowait

如果該行記錄已經被鎖定,更新的時候等待5秒,如果這5秒內,該行記錄被解鎖,那麼返回查詢結果,如果5秒內仍未解鎖,那麼系統會直接拋錯 ora-00054 
select * from person for update wait 5;

另外,如果使用 select * from person  where id = '1'  for update ,當該行記錄已經被鎖定時,那麼系統將一直等待該行記錄被釋放後,再加鎖。

二、表級鎖:

行共享:允許使用者進行任何操作,禁止排他鎖 
lock table person in row share mode;

行排他:允許使用者進行任何操作,禁止共享鎖 
lock table person in row exclusive mode;

共享鎖:其他使用者只能看,不能修改 
lock table person in share mode;

共享行排他:比共享鎖有更多限制 
lock table person in share row exclusive mode;

排他鎖:其他使用者只能看,不能修改,不能加其他鎖 
lock table person in exclusive mode;

對於通過lock table命令主動新增的鎖定來說,如果要釋放它們,只需要發出rollback命令即可。