掌握了JDBC最基本的與數據庫交互後,接下來,咱們要修煉進階篇了,此篇涉及大量的專業名詞,須要有必定天賦的修行者修煉,不過,我相信,可以輕鬆經過第一篇的你,絕對是那個骨骼精奇,天資聰慧的修行者~那麼,咱們進入這次的修行把---JDBC的事務管理數據庫
事務:在一個業務場景中,保持一系列操做的總體性,咱們稱做事務~簡單來說,在一系列的操做中,要麼,全部操做都生效,要麼全部操做都不生效,不存在某些操做生效,某些操做不生效的狀況。舉個例子~業務場景:小魚兒轉10定金子給花完好;涉及的操做:1.錢從小魚兒的兜裏轉出~2.錢轉入到花完好的兜中~,兩個操做缺一不可,若是操做1在途中受阻,那麼錢就會回到小魚兒的兜中,只有這樣,才能保證我業務操做的完整性。多線程
事務的特性:併發
一、原子性(atomicity):組成事務的語句造成了一個邏輯單元,不能只執行一部分;atom
二、一致性(consistency):在事務處理執行先後,數據庫與理論值是一致的(數據庫完整性約束);線程
三、隔離性(isolcation):一個事務處理和另外一個事務處理相互間互不影響;事務
四、持續性(durability):事務處理的效果可以被永久保存下來。ci
隔離級別:it
一、多線程併發執行可能會產生如下三個問題:io
髒讀(dirtyreads):一個事務讀取了另外一個事務未提交的並行事務寫的數據;table
不可重複讀(non-repeatablereads):一個事務從新讀取前面讀取過的數據,發現該數據已經被另外一個已提交的事務修改過;
幻讀(phantomread):一個事務從新執行一個查詢,返回一套符合條件的行,發現這些行由於最近提交的事務而發生了改變
二、隔離級別
讀未提交(Read uncommitted):未解決
讀已提交 (Readcommitted):已解決:髒讀
可重複讀 (Repeatableread):已解決:髒讀,不可重複讀
序列化 (Serializble):已解決:髒讀,不可重複讀,幻讀
三、設置隔離級別
connection.setTransactionlsolation(Connection.事務級別)
MySql默認爲度已提交;
基本操做:
一、connection.setAutCommit(false):關閉事務自動提交
二、connection.commit():手動提交事務
三、connection.rollback():事務回滾
補:撤銷事務中的部分操做
SavePoint sp = connection.setSavepoint();:設置事務回滾點
connection.rollback(sp);
connection.commit();:最後不要忘了提交事務,不然前面須要提交保存的操做也將不會保存到數據庫中
總之,事務就是爲了保證咱們操做的一致性,完整性,一些列操做中,沒有異常發生,咱們就看能夠commit提交事務,只要有一處發生異常,那麼就須要使用rollback回滾草錯,本篇更注重理解,理解好事務的核心,在該使用的地方可以正確的使用事務~