Posted on 2008-06-26 11:24
leekiang 閱讀(401)
評論(0) 編輯 收藏 所屬分類:
jdbc、事務、并發(fā)
我單位物資系統(tǒng):庫存表kcb,庫存明細kcmx?
當發(fā)生一筆動態(tài)的時候,先查詢庫存表中的庫存數(shù)量,然后加上增減數(shù)量,得到新庫存,update,commit;?
接著把庫存數(shù)量,增減數(shù)量,更改時間分別插入到庫存明細:前次數(shù)量,增減數(shù)量,更改時間。?
問
題:現(xiàn)在有兩條數(shù)據(jù)更改時間很接近? a? 10:51:47:01b? 10:51:46:25?
.也就是說兩條數(shù)據(jù)先后更新,而且更新的是同樣一筆物資。于是,a?
條記錄得到的前存數(shù)量和b條記錄得到的前存數(shù)量一樣,(好像叫讀臟數(shù)?)于是記錄b的更新就被當作不存在了!?
系統(tǒng)在隨后的更新中查到的是記錄a更新候的數(shù)據(jù),一切正常,唯有記錄b? 被忽略了;(于是庫存錯了,領(lǐng)導批了)?
?
還有一個奇怪的問題,就是庫存明細的查詢是用存儲過程作的,為什么select到pb的數(shù)據(jù)窗口之后別的數(shù)據(jù)都是按時間順序排列,唯有上面兩條,a在b之前!時間也會錯?相差太近??
我以后怎么辦?高人教我
http://blog.csdn.net/qiume/archive/2009/02/26/3938382.aspx
對數(shù)據(jù)庫中的數(shù)據(jù)修改都是在內(nèi)存中完成的,這些修改的結(jié)果可能已經(jīng)寫到硬盤也可能沒有寫到硬盤,如果在操作過程中,發(fā)生斷電或系統(tǒng)錯誤等故障,數(shù)據(jù)庫可以
保證未結(jié)束的事務對數(shù)據(jù)庫的數(shù)據(jù)修改結(jié)果即使已經(jīng)寫入磁盤,在下次數(shù)據(jù)庫啟動后也會被全部撤銷;而對于結(jié)束的事務,即使其修改的結(jié)果還未寫入磁盤,在數(shù)據(jù)
庫下次啟動后會通過事務日志中的記錄進行“重做”,即把丟失的數(shù)據(jù)修改結(jié)果重新生成,并寫入磁盤,從而保證結(jié)束事務對數(shù)據(jù)修改的永久化。這樣也保證了事務
中的操作要么全部完成,要么全部撤銷。