db2v8 update巢狀子查詢的問題

2021-08-29 08:41:13 字數 829 閱讀 8712

最近在作專案中發現了乙個問題,以前對update了解不深,特將此問題總結如下:

資料庫db2v8,隔離級別cs

在測試update語句的時候發現:

update a set a=1 where a=2;

update a set a=1 where a in(select a from a where a=2);

單個session執行,兩者的結果是一樣的。

在併發情況下發現一些不同:

多做點資料保證真正併發,比如50w,無索引更新100條。

第一種情況:

1:update a set a=1 where a=2;

2:update a set a=3 where a=2;

先後以1,2的順序併發執行。

結果是1執行的結果,而後執行的因為先前已經修改了a 所以執行後更新的行為0;

第二種情況

3:update a set a=1 where a in(select a from a where a=2);

4:update a set a=3 where a in(select a from a where a=2);

先後以3,4的順序併發執行。

結果是4執行的結果。原因是3執行後結果被4自行後結果覆蓋。

分析其原因,update不帶子查詢情況下會根據查詢條件會加行鎖,保證資料一致性,其他update語句要等其事務提交才能讀取改行資料。

update帶子查詢情況下,查詢過程不加鎖,查詢結果返回給update時才加鎖,相當於先select ,再更新的過程。此時別的session update也會查詢到該條記錄,最後等到3事務提交時執行就會覆蓋掉之前的資料。

在red hat linux上安裝DB2 v8

看了這個帖子 提到 很多人不知道db2的fixpack的包比db2的該版本的原始版本和前乙個版本都要大的原因,其實是因為fixpack中包含所有的內容 因此不需要從原始版本開始安裝,你直接安裝fixpack就可以 db2 v8 fixpack db2 v9 fixpack 步驟如下 以下均為linu...

db2 update注意的問題

今天用db2 update 多條記錄,用到了下面的形式 update b set clientname select name from a where b.id a.id 報了 811的錯誤。這裡要注意的是 b.id a.id當a找不到記錄的id滿足這個條件時,返回的是null,即會把b的id在a...

db2 v9 7 跨平台遷移

original db2 windows 2008 db2 v9.7 aim db2 suse12 sp3 db2 v9.7 author duan yu 段譽 mail chinazzbcn gmail.comor cn duanyu foxmail.com 一 準備以下軟體 winscp 傳輸檔...