hibernate的事務處理:
事務:* 事務就是邏輯上的一組操作,要麼全都成功,要麼全都失敗!!!
事務特性:
* 原子性:事務一組操作不可分割.
* 一致性:事務的執行前後,資料完整性要保持一致.
* 隔離性:乙個事務在執行的過程中不應該受到其他事務的干擾.
* 永續性:一旦事務結束,資料就永久儲存資料庫.
如果不考慮事務的隔離性引發一些安全性問題:
* 5大類問題:3類讀問題 2類寫問題.
* 讀問題:
* 髒讀 :乙個事務讀到另乙個事務未提交資料.
* 不可重複讀 :乙個事務讀到另乙個事務已經提交資料(update),導致查詢結果不一致.
* 虛讀 :乙個事務讀到另乙個事務已經提交的資料(insert),導致查詢結果不一致
* 避免三種讀的問題:
* 設定事務的隔離級別:
* 未提交讀:以上三種讀問題 都有可能發生.
* 已提交讀:避免髒讀,但是不可重複讀和虛讀有可能發生.
* 重複讀:避免髒讀和不可重複讀,但是虛讀是有可能發生.
* 序列的:可以避免以上三種讀問題.
* 在hibernate中設定事務的隔離級別:
* 在核心配置檔案中:
4寫問題:丟失更新
* 解決;
* 悲觀鎖:當乙個事務正在進行時,其他事務不允許修改資料。
@test/** 使用悲觀鎖解決丟失更新 */
public
void
demo1()
@test
/** 使用悲觀鎖解決丟失更新 */
public
void
demo2()
* 樂觀鎖:
在對映檔案中加一句version"/>,
在customer實體類中加乙個屬性 version
標籤version是固定的,name裡面的屬性可以隨意取名,為方便區分,version更好。
@test/** 使用樂觀鎖解決丟失更新 */
public
void
demo3()
@test
/** 使用樂觀鎖解決丟失更新 */
public
void
demo4()
關於悲觀鎖和樂觀鎖更清晰的講述:
悲觀鎖(pessimistic lock), 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。
樂觀鎖(optimistic lock), 顧名思義,就是很樂觀,每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個資料,可以使用版本號等機制。樂觀鎖適用於多讀的應用型別,這樣可以提高吞吐量,像資料庫如果提供類似於write_condition機制的其實都是提供的樂觀鎖。
兩種鎖各有優缺點,不可認為一種好於另一種,像樂觀鎖適用於寫比較少的情況下,即衝突真的很少發生的時候,這樣可以省去了鎖的開銷,加大了系統的整個吞吐量。但如果經常產生衝突,上層應用會不斷的進行retry,這樣反倒是降低了效能,所以這種情況下用悲觀鎖就比較合適。
原文:另外關於二級快取,,
PB事務處理
1 資料視窗更新,只要dberror有錯誤,而事先沒有做過任何commit工作,那麼rollback可以回滾到上次commit位置,即上次commit後所有的資料將被回滾。2 如果是直接寫入sql語句,只要資料庫出現錯誤,那麼rollback可以回滾到上次commit的位置,即上次commit後所有...
MySQL事務處理
start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...
ASP事務處理
asp事務處理。測試資料庫為sql server,伺服器為本機,資料庫名為test,表名為a,兩個欄位id int 主鍵標識,num int set conn server.createobject adodb.connection strconn provider sqloledb.1 persi...