java事務(wù)的概念淺析
事務(wù),一般是指要做的或所做的事情。在計(jì)算機(jī)術(shù)語中是指訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)。事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)。事務(wù)通常由高級(jí)數(shù)據(jù)庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執(zhí)行所引起,并用形如begin transaction和end transaction語句(或函數(shù)調(diào)用)來界定。事務(wù)由事務(wù)開始(begin transaction)和事務(wù)結(jié)束(end transaction)之間執(zhí)行的全體操作組成。
一個(gè)Java應(yīng)用系統(tǒng),如果要操作數(shù)據(jù)庫,則通過JDBC來實(shí)現(xiàn)的。增加、修改、刪除都是通過相應(yīng)方法間接來實(shí)現(xiàn)的,事務(wù)的控制也相應(yīng)轉(zhuǎn)移到Java程序代碼中。因此,數(shù)據(jù)庫操作的事務(wù)習(xí)慣上就稱為Java事務(wù)。
1、事務(wù)的特性
事務(wù)必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性 (isolation)和持久性(durability)的縮寫。
原子性(atomicity):事務(wù)是數(shù)據(jù)庫的邏輯工作單位,而且是必須是原子工作單位,對(duì)于其數(shù)據(jù)修改,要么全部執(zhí)行,要么全部不執(zhí)行。比如A向B轉(zhuǎn)賬1000元,那么這就一定要保證原子性(要么同時(shí)成功,要么同時(shí)失敗)。
一致性(consistency):事務(wù)必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài),一致性與原子性是密切相關(guān)的。比如A向B轉(zhuǎn)賬,不可能A扣了錢,B卻沒收到(這就是非一致性)。
隔離性(isolation):一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)所影響。比如A和C同時(shí)向B轉(zhuǎn)賬,那B同一時(shí)間只能和一個(gè)人交易(同時(shí)只能有一個(gè)交易在執(zhí)行)。
持久性(durability):一個(gè)事務(wù)一旦提交,事物的操作便永久性的保存在DB中。即使此時(shí)再執(zhí)行回滾操作也不能撤消所做的更改。A向B轉(zhuǎn)賬,成功以后B的賬戶就存入了轉(zhuǎn)賬數(shù)額,在不做其他的操作前提下數(shù)據(jù)是永久性的。
2、事務(wù)的隔離級(jí)別
串行化,Serializable,一個(gè)事務(wù)在執(zhí)行過程中完全看不到其他事務(wù)對(duì)數(shù)據(jù)庫所做的更新。
可重復(fù)讀,Repeatable Read,一個(gè)事務(wù)在執(zhí)行過程中可以看到其他事務(wù)已經(jīng)提交的記錄,但是不能看到其他事務(wù)對(duì)已有記錄的更新。
讀已提交數(shù)據(jù),Read Commited,一個(gè)事務(wù)在執(zhí)行過程中可以看到其他事務(wù)已經(jīng)提交的記錄,而且能看到其他事務(wù)對(duì)已有記錄的更新。
讀未提交數(shù)據(jù),Read UnCommited,一個(gè)事務(wù)在執(zhí)行過程中可以看到其他事務(wù)沒有提交的記錄,而且能看到其他事務(wù)沒有提交的記錄的更新。
隔離級(jí)別越高,越能保證數(shù)據(jù)的完整性和一致性,但對(duì)高并發(fā)性能影響也越大,故需要合理選擇。
3、Java中的事務(wù)處理
一般情況下,J2EE應(yīng)用服務(wù)器支持JDBC事務(wù)、JTA(Java Transaction API)事務(wù)、容器管理事務(wù)。一般情況下,最好不要在程序中同時(shí)使用上述三種事務(wù)類型,比如在JTA事務(wù)中嵌套JDBC事務(wù)。第二方面,事務(wù)要在盡可能短的時(shí)間內(nèi)完成,不要在不同方法中實(shí)現(xiàn)事務(wù)的使用。
到此這篇關(guān)于java事務(wù)的概念淺析的文章就介紹到這了,更多相關(guān)java里面有事務(wù)的概念嗎內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)畫圖 給圖片底部添加文字標(biāo)題
這篇文章主要介紹了Java實(shí)現(xiàn)畫圖 給圖片底部添加文字標(biāo)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11利用Java中Calendar計(jì)算兩個(gè)日期之間的天數(shù)和周數(shù)
Java 語言的Calendar(日歷),Date(日期),和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個(gè)基本但是非常重要的部分。日期是商業(yè)邏輯計(jì)算一個(gè)關(guān)鍵的部分。下面這篇文章就給大家介紹了如何利用Java中Calendar計(jì)算兩個(gè)日期之間的天數(shù)和周數(shù),下面來一起看看吧。2016-12-12js中去除字符串中所有的html標(biāo)簽代碼實(shí)例
這篇文章主要介紹了js中去除字符串中所有的html標(biāo)簽代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中的2種實(shí)例代碼
正則表達(dá)式驗(yàn)證密碼功能在項(xiàng)目中經(jīng)常被使用到,但是很多朋友還是不大會(huì)使用密碼正則表達(dá)式進(jìn)行驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中2種的相關(guān)資料,需要的朋友可以參考下2022-08-08Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法
這篇文章主要介紹了Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08java對(duì)象和json的來回轉(zhuǎn)換知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享了一篇關(guān)于java對(duì)象和json的來回轉(zhuǎn)換知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01java基于jcifs.smb實(shí)現(xiàn)遠(yuǎn)程發(fā)送文件到服務(wù)器
這篇文章主要介紹了java基于jcifs.smb實(shí)現(xiàn)遠(yuǎn)程發(fā)送文件到服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01