1.概念:事務指邏輯上的一組操作,組成這組操作的各個單元,要么全部成功,要么全部不成功。
2.數據庫開啟事務的命令dtl:
Start transaction開啟事務
Rollback回滾事務(撤銷)
Commit提交事務
3.JDBC控制事務語句:
Connection.setAutoCommit(false); ------start transaction
Connecttion.rollback(); ------roolback
Connection.commit(); ??------commit
4.事務的特性(ACID)
(1)原子性(Atomicity)
原子性是指事務是一個不可分割的工作單位,事務中的操作要么都發生,要么都不發生。
(2)一致性(Consistency)
事務必須使數據庫從一個一致性狀態變換到另外一個一致性狀態。
(3)隔離性(Isolation)
事務的隔離性是多個用戶并發訪問數據庫時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作數據所干擾,即多個并發事務之間要相互隔離。
(4)持久性(Durability)
持久性是指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響
5.事務的隔離級別
多個線程開啟各自事務操作數據庫中數據時,數據庫系統要負責隔離操作,以保證各個線程在獲取數據時的準確性。
如果不考慮隔離性,可能會引發如下問題:
(1)臟讀:指一個事務讀取了另外一個事務未提交的數據。
(2)不可重復讀:針對一條記錄的,同一條記錄前后不一樣
(3)虛讀:幻讀,同一張表前后不一樣記錄數
6.數據庫共定義了四種隔離級別:
(1)Serializable:可避免臟讀、不可重復讀、虛讀情況的發生。(串行化)
(2)Repeatable read:可避免臟讀、不可重復讀情況的發生。
(3)Read committed:可避免臟讀情況發生。
(4)Read uncommitted:最低級別,以上情況均無法保證。(讀未提交)
set ??transaction isolation level設置事務隔離級別
select @@tx_isolation查詢當前事務隔離級別
7.注意:
(1)先設置隔離級別,再開啟事務。
Conn.setTransactionIsolation(Connection.*);
Conn.setAutoCommit(false);
(2)Connection中的setTransactionIsolation(int level)用于設置隔離級別
Level:Connection中的常量
8.案例:在JDBC代碼中使如下轉帳操作在同一事務中執行。
?
