1.關閉自動提交功能。
2.演示事務
**裡面的事務,主要是針對連線來的。
1. 通過***x.setautocommit(false )來關閉自動提交的設定。
2. 提交事務 ***x.commit();
3. 回滾事務 ***x.rollback();
@test
public
void
testtransaction() catch (sqlexception e) catch (sqlexception e1)
e.printstacktrace();
}finally
}
指的是 事務中包含的邏輯,不可分割。
指的是 事務執行前後。資料完整性
指的是 事務在執行期間不應該受到其他事務的影響
指的是 事務執行成功,那麼資料應該持久儲存到磁碟上。
不考慮隔離級別設定,那麼會出現以下問題。
髒讀 不可重讀 幻讀.
– 髒讀
乙個事務讀到另外乙個事務還未提交的資料– 不可重複讀
乙個事務讀到了另外乙個事務提交的資料 ,造成了前後兩次查詢結果不一致。設定a視窗的隔離級別為 讀未提交
兩個視窗都分別開啟事務
丟失更新設定a視窗的隔離級別為 讀已提交
ab兩個視窗都開啟事務, 在b視窗執行更新操作。
3.在a視窗執行的查詢結果不一致。 一次是在b視窗提交事務之前,一次是在b視窗提交事務之後。
這個隔離級別能夠遮蔽 髒讀的現象, 但是引發了另乙個問題 ,不可重複讀。
如果有乙個連線的隔離級別設定為了序列化 ,那麼誰先開啟了事務, 誰就有了先執行的權利, 誰後開啟事務,誰就只能得著,等前面的那個事務,提交或者回滾後,才能執行。 但是這種隔離級別一般比較少用。 容易造成效能上的問題。 效率比較低。在**裡面會使用事務
conn.setautocommit(false);
conn.commit();
conn.rollback();
事務只是針對連線物件,如果再開乙個連線物件,那就是預設的提交。
事務是會自動提交的。
安全隱患讀未提交
引發問題: 髒讀讀已提交
解決: 髒讀 引發: 不可重複讀可重複讀
解決: 髒讀 、 不可重複讀 , 未解決: 幻讀可序列化
解決: 髒讀、 不可重複讀 、 幻讀。mysql 預設的隔離級別是 可重複讀
oracle 預設的隔離級別是 讀已提交
可以在查詢的時候,加入 for update要求程式設計師自己控制。事務相關知識點
原子性 atomicity 事務中所有操作是不可再分割的原子單位。事務中所有操作要麼全部執行成功,要麼全部執行失敗。一致性 consistency 事務執行後,資料庫狀態與其它業務規則保持一致。如轉賬業務,無論事務執行成功與否,參與轉賬的兩個賬號餘額之和應該是不變的。隔離性 isolation 隔離...
事務的相關知識點
一件事情有n個組成單元 要不這n個組成單元同時成功 要不n個單元就同時失敗,就是將n個組成單元放到乙個事務中。開啟事務 start transaction 提交 commit 回滾 rollback 開啟事務 conn.setautocommit false 提交事務 conn.commit 回滾 ...
spring事務的相關知識點
4 事務管理失效的情況 所謂spring事務的傳播屬性,就是定義多個事務同時存在的時候,spring應該如何處理這些事務的行為。簡單來講就是 乙個開啟事務的方法執行在另乙個開啟了事務的方法中是,當前方法是開啟乙個新的事物還是使用同乙個事務 這些屬性在transactiondefinition中定義,...