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...