最近在作專案中發現了乙個問題,以前對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 傳輸檔...