事務

事務:用來保證幾個操作一致性

 事務必須服從ISO/IEC所制定的ACID原則篮昧。

ACID是原子性(atomicity)懊昨、一致性(consistency)、隔離性 (isolation)和持久性(durability)的縮寫躏惋。

事務的原子性表示事務執(zhí)行過程中的任何失敗都將導致事務所做的任何修改失效。
一致性表示 當事務執(zhí)行失敗時,所有被該事務影響的數(shù)據(jù)都應該恢復到事務執(zhí)行前的狀態(tài)域仇。
隔離性表示在事務執(zhí)行過程中對數(shù)據(jù)的修改,在事務提交之前對其他事務不可見垦细。
持 久性表示已提交的數(shù)據(jù)在事務執(zhí)行失敗時,數(shù)據(jù)的狀態(tài)都應該正確叹谁。

簡單理解就是 保證一組sql語句的執(zhí)行完整性憔涉、要么全部成功兜叨、要么全部失敗
由于不同的業(yè)務環(huán)境對事物有不同的要求、通常把事物寫到java程序中來控制sql語句通知db環(huán)境跪但。
默認情況下是一條語句一個事物執(zhí)行的

java.sql.Connection 中提供了對于事物的控制方法

public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()

歡迎到我的網(wǎng)站尋找更多的知識

JDBC的事務支持

JDBC對事務的支持體現(xiàn)在三個方面:

1.自動提交模式(Auto-commit mode)

Connection提供了一個auto-commit的屬性來指定事務何時結束爱榔。

a.當auto-commit為true時筛欢,當每個獨立SQL操作的執(zhí)行完畢版姑,事務立即自動提交冯凹,也就是說每個SQL操作都是一個事務匈庭。

一個獨立SQL操作什么時候算執(zhí)行完畢,JDBC規(guī)范是這樣規(guī)定的:

對數(shù)據(jù)操作語言(DML鸽扁,如insert,update,delete)和數(shù)據(jù)定義語言(如create,drop),語句一執(zhí)行完就視為執(zhí)行完畢骡和。

對select語句,當與它關聯(lián)的ResultSet對象關閉時婆赠,視為執(zhí)行完畢。

對存儲過程或其他返回多個結果的語句植兰,當與它關聯(lián)的所有ResultSet對象全部關閉份帐,所有update count(update,delete等語句操作影響的行數(shù))和output parameter(存儲過程的輸出參數(shù))都已經(jīng)獲取之后,視為執(zhí)行完畢楣导。

b. 當auto-commit為false時废境,每個事務都必須顯示調(diào)用commit方法進行提交,或者顯示調(diào)用rollback方法進行回滾筒繁。auto-commit默認為true噩凹。

JDBC提供了5種不同的事務隔離級別,在Connection中進行了定義毡咏。

2.事務隔離級別(Transaction Isolation Levels)

JDBC定義了五種事務隔離級別:

TRANSACTION_NONE JDBC驅動不支持事務

TRANSACTION_READ_UNCOMMITTED 允許臟讀驮宴、不可重復讀和幻讀。

TRANSACTION_READ_COMMITTED 禁止臟讀呕缭,但允許不可重復讀和幻讀堵泽。

TRANSACTION_REPEATABLE_READ 禁止臟讀和不可重復讀,單運行幻讀恢总。

TRANSACTION_SERIALIZABLE 禁止臟讀迎罗、不可重復讀和幻讀。

3.保存點(SavePoint)

JDBC定義了SavePoint接口片仿,提供在一個更細粒度的事務控制機制纹安。
當設置了一個保存點后,可以rollback到該保存點處的狀態(tài),而不是rollback整個事務厢岂。

Connection接口的setSavepoint和releaseSavepoint方法可以設置和釋放保存點光督。

JDBC規(guī)范雖然定義了事務的以上支持行為,但是各個JDBC驅動塔粒,數(shù)據(jù)庫廠商對事務的支持程度可能各不相同可帽。如果在程序中任意設置,可能得不到想要的效果窗怒。為此映跟,JDBC提供了DatabaseMetaData接口,提供了一系列JDBC特性支持情況的獲取方法扬虚。比如努隙,通過DatabaseMetaData.supportsTransactionIsolationLevel方法可以判斷對事務隔離級別的支持情況,通過DatabaseMetaData.supportsSavepoints方法可以判斷對保存點的支持情況辜昵。

與事務相關的理論

1.事務(Transaction)的四個屬性(ACID)

原子性(Atomic) 對數(shù)據(jù)的修改要么全部執(zhí)行荸镊,要么全部不執(zhí)行。

一致性(Consistent) 在事務執(zhí)行前后堪置,數(shù)據(jù)狀態(tài)保持一致性躬存。

隔離性(Isolated) 一個事務的處理不能影響另一個事務的處理。

持續(xù)性(Durable) 事務處理結束舀锨,其效果在數(shù)據(jù)庫中持久化岭洲。

 

2.事務并發(fā)處理可能引起的問題

臟讀(dirty read) 一個事務讀取了另一個事務尚未提交的數(shù)據(jù),

不可重復讀(non-repeatable read) 一個事務的操作導致另一個事務前后兩次讀取到不同的數(shù)據(jù)

幻讀(phantom read) 一個事務的操作導致另一個事務前后兩次查詢的結果數(shù)據(jù)量不同坎匿。

舉例:

事務A盾剩、B并發(fā)執(zhí)行時,

當A事務update后替蔬,B事務select讀取到A尚未提交的數(shù)據(jù)告私,此時A事務rollback,則B讀到的數(shù)據(jù)是無效的"臟"數(shù)據(jù)承桥。

當B事務select讀取數(shù)據(jù)后驻粟,A事務update操作更改B事務select到的數(shù)據(jù),此時B事務再次讀去該數(shù)據(jù)凶异,發(fā)現(xiàn)前后兩次的數(shù)據(jù)不一樣蜀撑。

當B事務select讀取數(shù)據(jù)后,A事務insert或delete了一條滿足A事務的select條件的記錄唠帝,此時B事務再次select屯掖,發(fā)現(xiàn)查詢到前次不存在的記錄("幻影")玄柏,或者前次的某個記錄不見了襟衰。

抄襲地址
github相關使用整理

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市粪摘,隨后出現(xiàn)的幾起案子瀑晒,更是在濱河造成了極大的恐慌绍坝,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苔悦,死亡現(xiàn)場離奇詭異轩褐,居然都是意外死亡,警方通過查閱死者的電腦和手機玖详,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門把介,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蟋座,你說我怎么就攤上這事拗踢。” “怎么了向臀?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵巢墅,是天一觀的道長。 經(jīng)常有香客問我券膀,道長君纫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任芹彬,我火速辦了婚禮蓄髓,結果婚禮上,老公的妹妹穿的比我還像新娘舒帮。我一直安慰自己双吆,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布会前。 她就那樣靜靜地躺著好乐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓦宜。 梳的紋絲不亂的頭發(fā)上蔚万,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音临庇,去河邊找鬼反璃。 笑死,一個胖子當著我的面吹牛假夺,可吹牛的內(nèi)容都是我干的淮蜈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼已卷,長吁一口氣:“原來是場噩夢啊……” “哼梧田!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤裁眯,失蹤者是張志新(化名)和其女友劉穎鹉梨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穿稳,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡存皂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逢艘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旦袋。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖它改,靈堂內(nèi)的尸體忽然破棺而出猜憎,到底是詐尸還是另有隱情,我是刑警寧澤搔课,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布胰柑,位于F島的核電站,受9級特大地震影響爬泥,放射性物質(zhì)發(fā)生泄漏柬讨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一袍啡、第九天 我趴在偏房一處隱蔽的房頂上張望踩官。 院中可真熱鬧,春花似錦境输、人聲如沸蔗牡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辩越。三九已至,卻和暖如春信粮,著一層夾襖步出監(jiān)牢的瞬間黔攒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工强缘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留督惰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓旅掂,卻偏偏與公主長得像赏胚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子商虐,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354