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 引發的『資源忙』異常報告
示例:
create table t(a varchar2(20),b varchar2(20));
insert into t values('1','1');
insert into t values('2','2');
insert into t values('3','3');
insert into t values('4','4');
現在執行如下操作:
在plsql develope中開啟兩個sql視窗,
在1視窗中執行sql
select * from t where a='1' for update;
在2視窗中執行sql1
1. select * from t where a='1'; 這一點問題也沒有,因為行級鎖不會影響純粹的select語句
再執行sql2
2. select * from t where a='1' for update; 則這一句sql在執行時,永遠處於等待狀態,除非視窗1中sql被提交或回滾。
如何才能讓sql2不等待或等待指定的時間呢? 我們再執行sql3
3. select * from t where a='1' for update nowait; 則在執行此sql時,直接報資源忙的異常。
若執行 select * from t where a='1' for update wait 6; 則在等待6秒後,報 資源忙的異常。
如果我們執行sql4
4. select * from t where a='1' for update nowait skip locked; 則執行sql時,即不等待,也不報資源忙異常。
現在我們看看執行如下操作將會發生什麼呢?
在視窗1中執行:
select * from t where rownum<=3 nowait skip locked;
在視窗2中執行:
select * from t where rownum<=6 nowait skip locked;
select for update 也就如此了吧,insert、update、delete操作預設加行級鎖,其原理和操作與select for update並無兩樣。
select for update of,這個of子句在牽連到多個表時,具有較大作用,如不使用of指定鎖定的表的列,則所有表的相關行均被鎖定,若在of中指定了需修改的列,則只有與這些列相關的表的行才會被鎖定。
oracle學習總結 oracle的介紹
1 資料庫的三層結構 client 專用於訪問資料庫 dbms database management system db例項 多個 db例項有很多資料物件 例 表,包,檢視,序列,函式,觸發器,索引 2 在專案中如何選擇資料庫 1 標的 2 功能 3 併發性問題 4 安全 穩定 5 作業系統 un...
oracle 2 oracle的使用者
1 dbca oracle的dbca主要用來管理資料庫,包括建立資料庫 刪除資料庫等。注意 建立資料庫的時候,密碼不能全是數字,也不能以數字開頭 2 ofa oracle flexible architecture oracle優化靈活結構 作用 多oracle版本的管理 ora90 資料庫管理工具...
oracle部分 oracle的分頁查詢
oracle的分頁查詢 問題 當乙個表中的資料量特別大的時候,如果一次性全部顯示給使用者,則造成頁面過於龐大,體驗極差。解決 使用分頁查詢 使用 rownum關鍵字 oracle對外提供的自動給查詢結果編號的關鍵字,與每行的資料沒有關係。注意 rownum關鍵字只能做 的判斷,不能進行 的判斷 se...