Java筆記一 Java中的事務

2021-09-04 11:33:11 字數 1364 閱讀 6919

transaction:指的是一組操作,裡面包含許多個單一邏輯。只要有乙個邏輯沒有執行成功,那麼都算失敗。所有的資料都回歸到最初的狀態(回滾)

(個人理解:相當於建立了資料庫的副本,先通過邏輯對副本進行操作,如果所有邏輯成功,提交事務,將副本資料覆蓋至原資料庫中。如果失敗,則將副本資料回滾至初始,並不對原資料庫資料產生影響。)

為了確保邏輯的成功。例:銀行轉賬

通過conn.setautocommit(fasle)來關閉連線物件(connection conn)的事務自動提交設定。

事務針對的是連線物件connection,比如兩個connection物件中的事務互不干擾。

提交事務:conn.commit();  回滾事務:conn.rollback();

隔離級別(優先順序從低至高):

1.讀未提交(read uncommitted)(引發:髒讀):乙個事務讀到其他事務尚未提交的資料

2.讀已提交(read committed)(解決:髒讀)(引發:不可重複讀):乙個事務讀到其他事務已經提交的資料,前後讀到的結果不一樣

3.可重複讀(repeatable read)(解決:髒讀,不可重複讀)(未解決:幻讀):可以讓事務在自己的會話中重複讀取資料,確保事務不受其他事務的影響,不會出現結果不一樣的狀況,顯示的還是以前的資料。

4.可序列化(也稱可序列化)(serializable)(最高端別遮蔽,解決所有問題):不過有一些缺點,只能單線執行。如果有乙個列檢的隔離級別設定為了序列化,那麼誰先開啟了事務,誰就有了先執行的權利,則需要將先開啟的事務commit(或rollback)後,其他事務才能繼續執行(其他事務時間等待時間過長會自動關閉),也即是乙個個事務執行,效率低。

ps:mysql預設的隔離級別的是可重複讀,oracle預設的隔離級別是讀已提交

效率(從高到低)

讀未提交 > 讀已提交 > 可重複讀 > 可序列化

攔截程度(從高到低)

可序列化 > 可重複讀 > 讀已提交 > 讀未提交

而如果不考慮隔離級別設定,那麼會出現以下問題,無法保證事務的隔離性:

1.**中使用事務

connection conn = new connection();//建立連線

conn.setautocommit(fasle);//關閉事務自動提交,相當於開啟事務

conn.commit();//提交

conn.rollback();//回滾

2.事務只是針對連線物件,不同的connection物件互不影響。

3.連線物件的預設事務是會自動提交的,如果不關閉自動提交。

java中的事務

一 什麼是事務 事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換成另一種狀態。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 和永續性...

Java中的事務

在事務中的多個操作,要麼都成功,要麼都失敗 通過 c.setautocommit false 關閉自動提交 使用 c.commit 進行手動提交 在mysql中,只有當表的型別是innodb的時候,才支援事務,所以需要把錶的型別設定為innodb,否則無法觀察到事務.修改表的型別為innodb的sq...

Java中事務的概念

什麼是事務?答 事務是訪問資料庫的乙個操作序列,db應用系統通過事務集來完成對資料的訪問。事務必須遵循4個原則,即常說的 acid a,automicity,原子性,即事務要麼被全部執行,要麼被全部不執行。如果事務下的子事務全部提交成功,則所有資料庫操作被提交,否則,應進行事務回滾。c,consis...