JDBC事務操作
事務(ACID)
原子性(atomicity):組成事務處理的語句形成一個邏輯單元,不能只執行其中的一部分
一致性(consistency):在事務處理執行前後,數據庫是一致的(數據庫數據完整性約束)
隔離性(isolcation):一個事務處理對另一個事務處理的影響
持續性(durability):事務處理的效果能夠被永久的保存下來
Connection.setAutoCommit(true/false) 設置事務是否自動提交(jdbc默認提交事務)
Connection.commit() 提交事務
Connection.rollback() 回滾事務
JTA:跨數據庫訪問資源,分成兩個階段提交事務。 JTA容器
隔離級別:
可串行化:(Serializable)最安全,但是效率最低。
可重複讀:(Repeatable read)有幻讀可能(推薦)
讀已提交:(Read committed)有不可重複讀、幻讀(推薦)
讀未提交(Read uncommitted)髒讀、不可重複讀、幻讀。安全性最差,效率最高。
鎖(悲觀鎖、樂觀鎖)
鎖機制主要是爲了解決併發性問題的。
悲觀鎖:悲觀鎖,通常是由數據庫機制實現的,在整個過程中把數據鎖住(查詢時),只要事務不釋放(提交/回滾)那麼任何用戶都不能查看或修改。
樂觀鎖:大多數的使用是採用數據版本的方式(version)實現,一般在數據庫中加入一個version字段在讀取數據的時候將version讀取出來,在保存數據的時候判斷version的值是否小於數據庫中的version值,如果小於不予更新,否則給予更新。
Hibernate對悲觀鎖和樂觀鎖都提供了支持
悲觀鎖:LockMode.UPGRADE(在load或get 獲得對象的時候設置該屬性)
樂觀鎖:需要使用到version字段和配置(在對象中就要聲明該version字段)