當前位置:首頁 » 編程語言 » sql語句中forupdate
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql語句中forupdate

發布時間: 2023-01-02 19:51:28

資料庫中Select For update語句的解析

他們已經說了相關的東西了
我再補充幾點:
分成兩類:加鎖范圍子句和加鎖行為子句

加鎖范圍子句:
在select…for update之後,可以使用of子句選擇對select的特定數據表進行加鎖操作。默認情況下,不使用of子句表示在select所有的數據表中加鎖
加鎖行為子句:

當我們進行for update的操作時,與普通select存在很大不同。一般select是不需要考慮數據是否被鎖定,最多根據多版本一致讀的特性讀取之前的版本。加入for update之後,Oracle就要求啟動一個新事務,嘗試對數據進行加鎖。如果當前已經被加鎖,默認的行為必然是block等待。使用nowait子句的作用就是避免進行等待,當發現請求加鎖資源被鎖定未釋放的時候,直接報錯返回。
在日常中,我們對for update的使用還是比較普遍的,特別是在如pl/sql developer中手工修改數據。此時只是覺得方便,而對for update真正的含義缺乏理解。
For update是Oracle提供的手工提高鎖級別和范圍的特例語句。Oracle的鎖機制是目前各類型資料庫鎖機制中比較優秀的。所以,Oracle認為一般不需要用戶和應用直接進行鎖的控制和提升。甚至認為死鎖這類鎖相關問題的出現場景,大都與手工提升鎖有關。所以,Oracle並不推薦使用for update作為日常開發使用。而且,在平時開發和運維中,使用了for update卻忘記提交,會引起很多鎖表故障。

那麼,什麼時候需要使用for update?就是那些需要業務層面數據獨占時,可以考慮使用for update。場景上,比如火車票訂票,在屏幕上顯示郵票,而真正進行出票時,需要重新確定一下這個數據沒有被其他客戶端修改。所以,在這個確認過程中,可以使用for update。這是統一的解決方案方案問題,需要前期有所准備。

Ⅱ for update和for update nowait 的意思

http://..com/question/59860423.html
for update的作用是用於對選擇的行加排他鎖的,在有些情況下,事務的處理需要先選中一些記錄,再對這些記錄進行處理.因此需要排他鎖.
而for update nowait的作用與for update相同,不同的是其他事務申請被鎖定的行數據時是等待該事務釋放資源,還是直接返回無法獲得資源

Ⅲ 如何使用select...for update 進行修改

就是讓你在Select 語句最後加上 「 for update"
但看你的語句是聯合多表並且是經過聚合運算的,可能無法修改,因為無法映射到原始的記錄上。

Ⅳ 在java sql代碼中select * from X for update 的作用是什麼

for update 作用,可手動修改select * from X查詢出來的結果集,可以做修改某個欄位,刪除和增加欄位。
方法是先解鎖(SQL window下有一行工具欄,左數第二個圖標,點擊鎖頭圖標,使其處於開鎖狀態。此操作對於其他用戶此表處於鎖表狀態,無法對該表做除查詢以外操作)就可以直接點擊相應欄位進行修改值。也可以點擊「+」增加對象,也可以點擊「-」刪除對象,做完修改後點擊鎖頭,然後按快捷鍵F10(commit)。
這個功能經常用來手動批量向表插入大量數據,用來做測試使用。

Ⅳ sql 後面跟 for update 什麼意思

這是plsql中特有的,用於修改非批量的數據。

執行完sql語句後,點紅框中的鎖的圖標,就可以修改數據了

Ⅵ select語句後以for update結尾是什麼意思

可以對這段返回的結果集進行修改
雖說實際上是這樣,但是操作中是不允許有復雜(聚合、聯接)計算的,一般只是select 一張表,充其量加上些where語句,然後就可以進行修改數據,修改完成後可以commit
從原理上來說 for update就是一中並發性的行級鎖機制,要敘述需要很大篇幅,具體可以網路

Ⅶ sql 關於 for update 的問題

update 用法是:
update table a, table (select distinct * from (select K_KPBH as K_KPBH,max(K_BGXH) as K_BGXH from ZC_KPXXB where K_KPBH in (select www from lp234) group by K_KPBH) a left outer join ZC_KPXXB b on a.K_KPBH=b.K_KPBH and a.K_BGXH=b.K_BGXH) b set a.XX = b.XX where a.YY = b.YY

Ⅷ pl/sql 中 for update 問題

個人發現的大概是四點吧
1.是不是r_Record沒有定義為r_Record c_tb1_1%rowtype;的原因。
2.是不是游標SELECT語句里使用了別名的緣故,游標里的查詢測試過沒,有沒有問題。
3.就是用到WHERE CURRENT OF的時候,兩張表的話需要指定FOR UPDATE OF R1.FIRST ,R2.FIRST;
4.但是兩張表的情況UPDATE 一張表WHERE CURRENT OF就要出錯,試試UPDATE兩張表,用替代觸發器更新多表視圖看看?
你看看這里http://www.itpub.net/thread-937399-1-1.html同樣的問題。

以前沒遇到過WHERE CURRENT OF的問題,以前只知道有個FOR UPDATE的,今天剛好學習學習哈哈。貌似這個是新特性還是什麼,WHERE CURRENT OF要用在釋放游標前,網上好多這方面的資料都是E文的,現在在出差不方便試驗,回去再試驗看看,樓主你要有結論了回復下哈。

create or replace procere XXXXXXXX
--這里的XXXXXXX()括弧裡面應該有定義輸入或者輸出參數的
is

--下面是定義一個游標,SELECT語句是一個查詢,你單獨測試下這個查詢看看有問題沒
--游標裡面查詢語句含AS同義詞不知道會不會有問題
cursor c_tbl_1 is
SELECT
R1.FIRST,
TO_CHAR(ADD_MONTHS(TO_DATE(R1.TIME,'YYYYMM'),1),'YYYYMM') AS SECOND,
R2.YEAR AS THIRD
FROM
A R1
INNER JOIN
B R2
ON
R2.FIRST = R1.FIRST
AND R2.TIME = TO_CHAR(ADD_MONTHS(TO_DATE(R1.TIME,'YYYYMM'),1),'YYYYMM')
FOR UPDATE OF R1.FIRST,R2.FIRST; --這里有修改加了個欄位
--如果r_Record沒有定義,那麼需要指明r_Record c_tb1_1%rowtype
r_Record c_tb1_1%rowtype;--添加的語句。

begin
for r_Record in c_tbl_1 loop --r_Record沒有定義
UPDATE A
SET
TIME = r_Record.SECOND,
YEAR = r_Record.THIRD
WHERE CURRENT OF c_tbl_1;
--上面的FOR UPDATE是雙表,這里UPDATE是單表出問題的吧。
end loop;
commit;
exception
when others then
rollback;
end XXXXXXXX;

Ⅸ Oracle查詢中Select * from fan where id = 『a1』 for update請問這個for update在這里是什麼意思

應該是這一條sql語句支持更新操作。如果你執行就可以看到提交、回滾按鈕被激活 ,表示有數據改動操作

Ⅹ plsql forupdate怎麼手動在尾行加多條數據

1、採用insert into values 語句插入一條,寫很多條語句即可多條數據,這種主要針對於離散值以及一些基礎信息的錄入,如:insert into test(xh,mc) values('123','測試');
如果插入的數據有規律,可利用for、loop循環插入,主要用於批量生成測試數據
begin
for i in 1 .. 100 loop
insert into test(xh,mc) values(i||'','測試');
end loop;
end ;。
2、採用insert into selct from 語句來一次性插入一個集合,這種主要依據於要插入的數據源已經存儲於資料庫對象中,或者利用al虛表來構造數據,經過加工後寫入一個集合。
insert into test (xh,mx) select '123','測試' from al;
3、採用plsql等工具、或者oracle的imp、impdp命令來導入,這種主要用資料庫與資料庫之間的大批量數據導入,導入的數據格式為plsql的pde、oracle的dmp等。dmp文件可使用
table_exists_action參數控制導入動作:replace替換原表,truncate清除原表數據再導入,append增量導入數據,當然impdp數據泵的導入要依賴於directory路徑。
impdp 用戶名/密碼 mpfile=123.dmp logfile=123.log directory=imp_dir tables=test table_exists_action=append
4、使用excel文件直接拷貝。這種主要用於要寫入的數據已是excel文件或者行列分明的其它格式文件,每一列的值和表結構相對應,可直接打開表的行級鎖,把數據拷貝進入。
打開行級鎖方法:
select t.*,rowid from 表名 t where 1=2;
select * from 表名 where 1=2 for update;
直接把excel數據拷貝到表裡