update 過程 併發查詢記錄

2021-06-23 01:16:06 字數 469 閱讀 7511

update t1 set t1.object_name='222';

時會掃瞄t1表,在記錄上加tx事務鎖(記錄級排他鎖),然後更新,然後再接著掃瞄,再加鎖後續記錄,再更新後續記錄,提交事務時,鎖釋放。

併發更新時,如果t1事務先掃瞄到資料加鎖了某條記錄(不是先發起更新),t2事務再掃瞄到這條資料,就會等待t1釋放鎖,等到t1釋放鎖時,t2事務收到訊息加鎖,然後準備更新,當發現整個記錄的資料當前讀版本與一致讀版本(查詢發起時(也即update發起時))一致時,會接著更新,如果發現不一致,會回滾之前的更新,然後重啟動更新(修改相關的時間點),進入select for update模式,先全部記錄加鎖,然後再更新,這樣就最多發生一次重啟動。

oracle裡可以併發的更新一張表,但是如果同時操作同一條記錄就會鎖等待,如果一致讀版本與當前讀版本不一致,在read committed隔離級別就會重啟動,在非預設的serializable隔離級別,就是收到ora-08177錯誤。

聊聊sql的併發update

本文主要簡述一下不同sql語句併發update的情況。update tablea set owner where id 複製 這種情況下,併發執行,最後執行的覆蓋掉前面執行的 update tablea set owner where id and version 複製 這種帶有版本號或時間戳的,屬...

UPDATE 重覆記錄

jay 09 01 20 update重複資料 procedure p upd v table varchar2,v column varchar2 as o cur1 mytype v num varchar2 20 sqltxt varchar2 200 v var varchar2 1 beg...

Oracle批量Update記錄

工作中經常用到oracle批量更新記錄,做為老手也怕出錯,總之要小心再小心,確保資料批量更新正確。下面舉乙個例子 1 建立兩張結構類似的表,建表語句如下 create table jayt1 id int,code varchar2 8 create table jayt2 id int,code ...