本篇內(nèi)容介紹了“什么是MySQL事務(wù)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司主營(yíng)開(kāi)江網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件定制開(kāi)發(fā),開(kāi)江h(huán)5小程序開(kāi)發(fā)搭建,開(kāi)江網(wǎng)站營(yíng)銷(xiāo)推廣歡迎開(kāi)江等地區(qū)企業(yè)咨詢(xún)
事務(wù)(Transaction)是由一系列對(duì)系統(tǒng)中數(shù)據(jù)進(jìn)?訪(fǎng)問(wèn)與更新的操作所組成的?個(gè)程序執(zhí)行邏輯單元。主要學(xué)習(xí)一下內(nèi)容:
(1) 事務(wù)的語(yǔ)法 (2) 事務(wù)的特性 (3) 事務(wù)并發(fā)問(wèn)題 (4) 事務(wù)隔離級(jí)別 (5) 不同隔離級(jí)別的鎖的情況(了解) (6) 隱式提交(了解)
1. begin;start transaction; 2. commit; 使得當(dāng)前的修改確認(rèn) 3. rollback; 使得當(dāng)前的修改被放棄
mysql中使用事務(wù)。需要指定存儲(chǔ)引擎為innodedb
事務(wù)的原?性是指事務(wù)必須是?個(gè)原子的操作序列單元。事務(wù)中包含的各項(xiàng)操作在事務(wù)結(jié)束后要么全部執(zhí)行成功要么全部執(zhí)行失敗,不可能處于部分成功部分失敗的狀態(tài)。事務(wù)執(zhí)?過(guò)程中出錯(cuò),會(huì)回滾到事務(wù)開(kāi)始前的狀態(tài),所有的操作就像沒(méi)有發(fā)?一樣。也就是說(shuō)事務(wù)是?個(gè)不可分割的整體,就像化學(xué)中學(xué)過(guò)的原子,是物質(zhì)構(gòu)成的基本單位。
事務(wù)的一致性是指事務(wù)的執(zhí)?不能破壞數(shù)據(jù)庫(kù)數(shù)據(jù)的完整性和一致性,一個(gè)事務(wù)在執(zhí)?之前和執(zhí)行之后,數(shù)據(jù)庫(kù)都必須處以?致性狀態(tài)。比如:如果從A賬戶(hù)轉(zhuǎn)賬到B賬戶(hù),不可能因?yàn)锳賬戶(hù)扣了錢(qián),?B賬戶(hù)沒(méi)有加錢(qián)。
事務(wù)的隔離性是指在并發(fā)環(huán)境中,并發(fā)的事務(wù)是互相隔離的。也就是說(shuō),不同的事務(wù)并發(fā)操作相同的數(shù)據(jù)時(shí),每個(gè)事務(wù)都有各自完整的數(shù)據(jù)空間。?個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其它并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)是不能互相干擾的。
事務(wù)的持久性是指事務(wù)?旦提交后,數(shù)據(jù)庫(kù)中的數(shù)據(jù)必須被永久的保存下來(lái)。即使服務(wù)器系統(tǒng)崩潰或服務(wù)器宕機(jī)等故障。只要數(shù)據(jù)庫(kù)重新啟動(dòng),那么一定能夠?qū)⑵浠謴?fù)到事務(wù)成功結(jié)束后的狀態(tài)。
臟讀:讀取到了沒(méi)有提交的數(shù)據(jù), 事務(wù)A讀取了事務(wù)B更新的數(shù)據(jù),然后B回滾操作,那么A讀取到的 數(shù)據(jù)是臟數(shù)據(jù)。
不可重復(fù)讀:同?條命令返回不同的結(jié)果集(更新).事務(wù) A 多次讀取同一數(shù)據(jù),事務(wù) B 在事務(wù)A 多次讀取的過(guò)程中,對(duì)數(shù)據(jù)做了更新并提交,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)時(shí),結(jié)果不一致。
幻讀:重復(fù)查詢(xún)的過(guò)程中,相同查詢(xún)的結(jié)果集前后不一致(insert, delete)。
4種事務(wù)隔離級(jí)別從上往下,級(jí)別越高,并發(fā)性越差,安全性就越來(lái)越高。 ?般數(shù)據(jù)默認(rèn)級(jí)別是 讀以提交或可重復(fù)讀。
讀未提交(READ_UNCOMMITTED)
讀未提交,該隔離級(jí)別允許臟讀取,其隔離級(jí)別是最低的。換句話(huà)說(shuō),如果一個(gè)事務(wù)正在處理理某一數(shù)據(jù),并對(duì)其進(jìn)?了更新,但同時(shí)尚未完成事務(wù),因此還沒(méi)有提交事務(wù);而以此同時(shí),允許另一個(gè)事務(wù)也能夠訪(fǎng)問(wèn)該數(shù)據(jù)。
讀已提交(READ_COMMITTED)
讀已提交是不同的事務(wù)執(zhí)行的時(shí)候只能獲取到已經(jīng)提交的數(shù)據(jù)。 這樣就不會(huì)出現(xiàn)上面的臟讀的情況了。但是在同一個(gè)事務(wù)中執(zhí)行同一個(gè)讀取,結(jié)果不一致。讀已提交解決了臟讀問(wèn)題,但是還是解決不了可重復(fù)讀問(wèn)題。
可重復(fù)讀(REPEATABLE_READ)
可重復(fù)讀就是保證在事務(wù)處理理過(guò)程中,多次讀取同一個(gè)數(shù)據(jù)時(shí),該數(shù)據(jù)的值和事務(wù)開(kāi)始時(shí)刻是一致的。因此該事務(wù)級(jí)別解決了不可重復(fù)讀和臟讀,但是有可能出現(xiàn)幻讀的數(shù)據(jù)。幻讀就是指同樣的查詢(xún)語(yǔ)句,前后連個(gè)時(shí)間點(diǎn)內(nèi)查詢(xún)的結(jié)果集不一致。
可序列化(SERIALIZABLE)
順序讀是最嚴(yán)格的事務(wù)隔離級(jí)別。它要求所有的事務(wù)排隊(duì)順序執(zhí)?行行,即事務(wù)只能一個(gè)接一個(gè)地處理,不能并發(fā)。
讀未提交(RU): 有行級(jí)的鎖,沒(méi)有間隙鎖。它與RC的區(qū)別是能夠查詢(xún)到未提交的數(shù)據(jù)。
讀已提交(RC):有行級(jí)的鎖,沒(méi)有間隙鎖,讀不到?jīng)]有提交的數(shù)據(jù)。
可重復(fù)讀(RR):有行級(jí)的鎖,也有間隙鎖,每次讀取的數(shù)據(jù)都是一樣的,并且沒(méi)有幻讀的情況。
序列化(S):有行級(jí)鎖,也有間隙鎖,讀表的時(shí)候,就已經(jīng)上鎖了
“什么是mysql事務(wù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!