1. 程式人生 > >Java中事務的特性

Java中事務的特性

Java-事務學習小結:

事務的特性

原子性:指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。 

一致性:事務必須使資料庫從一個一致性狀態變換到另外一個一致性狀態。轉賬前和轉賬後的總金額不變。

隔離性:事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作資料所幹擾,多個                 併發事務之間要相互隔離。

永續性:指一個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。

事務的隔離級別

贓讀:指一個事務讀取了另一個事務未提交的資料。

不可重複讀:在一個事務內讀取表中的某一行資料,多次讀取結果不同。一個事務讀取到了另一個事務提交後的資料。(update)

虛讀(幻讀):是指在一個事務內讀取到了別的事務插入的資料,導致前後讀取不一致。(insert)

資料庫通過設定事務的隔離級別防止以上情況的發生:

* 1、READ UNCOMMITTED: 贓讀、不可重複讀、虛讀都有可能發生。

* 2、READ COMMITTED: 避免贓讀。不可重複讀、虛讀都有可能發生。(oracle預設的)

* 4、REPEATABLE READ:避免贓讀、不可重複讀。虛讀有可能發生。(mysql預設)

* 8、SERIALIZABLE: 避免贓讀、不可重複讀、虛讀。

級別越高,效能越低,資料越安全

mysql中:

檢視當前的事務隔離級別:SELECT @@TX_ISOLATION;

更改當前的事務隔離級別:SET TRANSACTION ISOLATION LEVEL 四個級別之一。

設定隔離級別必須在事務之前



JDBC控制事務的隔離級別

Connection介面:

 

設定隔離級別:必須在開啟事務之前。

Connection.setTransactionIsolation(intlevel);

各個隔離級別對應的常量值: