數(shù)據(jù)庫(kù)事務(wù)壤短,事務(wù)是指一系列邏輯上不可分割的SQL語(yǔ)句,事務(wù)有四大特性(ACID):一致性、原子性久脯、隔離性蒜绽、持久性。
按照個(gè)人淺顯的理解桶现,一致性是事務(wù)最基本的屬性躲雅,其他的三個(gè)特性都是為了保證數(shù)據(jù)一致性存在的。
一致性是指骡和,事務(wù)完成時(shí)數(shù)據(jù)保持一致性相赁,處于一種有意義的狀態(tài),就比如轉(zhuǎn)賬慰于,A用戶轉(zhuǎn)錢(qián)給B用戶钮科,如果A的錢(qián)減少了,而B(niǎo)的的余額卻沒(méi)有增加婆赠,那么我們認(rèn)為此時(shí)數(shù)據(jù)不一致绵脯。
事務(wù)的原子性解決了上面的問(wèn)題,轉(zhuǎn)賬的加錢(qián)減錢(qián)要么都發(fā)生要么都不發(fā)生休里。但是原子性不能完全解決一致性的問(wèn)題蛆挫,在多個(gè)事務(wù)并發(fā)進(jìn)行的情況下,即使保證了每個(gè)事務(wù)的原子性妙黍,仍然可能導(dǎo)致數(shù)據(jù)不一致悴侵,列如 事務(wù)1需要將100元轉(zhuǎn)入帳號(hào)A:先讀取帳號(hào)A的值,然后在這個(gè)值上加上100拭嫁。但是可免,在這兩個(gè)操作之間,另一個(gè)事務(wù)2修改了帳號(hào)A的值做粤,為它增加了100元浇借。那么最后的結(jié)果應(yīng)該是A增加了200元。但事實(shí)上怕品,
事務(wù)1最終完成后妇垢,帳號(hào)A只增加了100元,因?yàn)槭聞?wù)2的修改結(jié)果被事務(wù)1覆蓋掉了堵泽。
為了保證并發(fā)情況下的一致性修己,引入了隔離性,即保證每一個(gè)事務(wù)能夠看到的數(shù)據(jù)總是一致的迎罗,就好象其它并發(fā)事務(wù)并不存在一樣。
事務(wù)一旦提交片仿,對(duì)數(shù)據(jù)庫(kù)的影響是永久的纹安,保證所有操作都是有效的。
編程式事務(wù):在代碼中手動(dòng)產(chǎn)生事務(wù)對(duì)象、手動(dòng)提交或回滾事務(wù)厢岂。
申明式事務(wù):聲明式事務(wù)建立在AOP之上的光督。其本質(zhì)是對(duì)方法前后進(jìn)行攔截,然后在目標(biāo)方法開(kāi)始之前創(chuàng)建或者加入一個(gè)事務(wù)塔粒,在執(zhí)行完目標(biāo)方法之后根據(jù)執(zhí)行情況提交或者回滾事務(wù)结借。