數(shù)據(jù)庫(kù)事務(wù)那些事
這期跟大家聊聊數(shù)據(jù)庫(kù)方面的內(nèi)容识补,說起數(shù)據(jù)庫(kù)一定會(huì)想到事務(wù)阅签,那么今天就從數(shù)據(jù)庫(kù)的事務(wù)開始說起兼搏。
數(shù)據(jù)庫(kù)事務(wù)
數(shù)據(jù)庫(kù)事務(wù)(Database Transaction)作為邏輯單元執(zhí)行一系列操作馅扣,只有全部執(zhí)行或者全部不執(zhí)行盈蛮。
數(shù)據(jù)庫(kù)事務(wù)的特性
傳說中的ACID
- 原子性(Atomicity)——事務(wù)內(nèi)部所有操作,執(zhí)行結(jié)果只有全部成功或者全部不成功
- 一致性(Consistency)——事務(wù)一定讓數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)轉(zhuǎn)換到另一個(gè)一致性狀態(tài)
- 隔離性(Isolation)——多個(gè)會(huì)話同時(shí)操作同一數(shù)據(jù)大溜,每個(gè)會(huì)話之間的事務(wù)是隔離的化漆,不會(huì)互相干擾
- 持久性(Durability)——事務(wù)一旦提交,那么數(shù)據(jù)對(duì)于數(shù)據(jù)庫(kù)來說是永久性的钦奋,即使遇到故障情況也不會(huì)丟失數(shù)據(jù)
數(shù)據(jù)庫(kù)事務(wù)解決的問題
- 臟讀——一個(gè)事務(wù)處理過程中讀取到其他未提交事務(wù)修改的數(shù)據(jù)
- 不可重復(fù)讀——一個(gè)事務(wù)內(nèi)多次讀取同一處數(shù)據(jù)座云,結(jié)果可能不一致的現(xiàn)象
- 幻讀——一個(gè)事務(wù)處理數(shù)據(jù)之后,其他事物也處理同一處數(shù)據(jù)付材,導(dǎo)致第一個(gè)事務(wù)的執(zhí)行者再次查詢的時(shí)候會(huì)發(fā)現(xiàn)出現(xiàn)幻覺了朦拖,因?yàn)槌霈F(xiàn)了不符合預(yù)期的結(jié)果。
PS:個(gè)人認(rèn)為不可重復(fù)讀也屬于幻讀的一種厌衔,因?yàn)樵谕粋€(gè)事物內(nèi)多次讀取無法保持一致璧帝,也是一種幻覺。
數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別
- Read uncommitted(讀未提交)——就是說讀取到了其他未提交的事務(wù)過程中處理的數(shù)據(jù)(中間數(shù)據(jù))富寿,會(huì)導(dǎo)致數(shù)據(jù)不一致
- Read committed(讀已提交)——就是說讀取到其他事務(wù)提交后的數(shù)據(jù)睬隶,導(dǎo)致無法在同一個(gè)事務(wù)內(nèi)讀取到相同的數(shù)據(jù)
- Repeatable Read(可重復(fù)讀)——就是說同一個(gè)事務(wù)內(nèi)可以重復(fù)讀取相同的數(shù)據(jù)不會(huì)受到其他事務(wù)提交的影響。
- Serializable Read(序列化讀)——就是說所有數(shù)據(jù)庫(kù)事務(wù)都是順序依次執(zhí)行的页徐,所以會(huì)規(guī)避之前提到的問題
總結(jié)
數(shù)據(jù)庫(kù)事務(wù)的出現(xiàn)解決了部分?jǐn)?shù)據(jù)庫(kù)并發(fā)情況下會(huì)出現(xiàn)的問題苏潜,但是選擇了比較高的隔離級(jí)別來解決問題,就會(huì)發(fā)現(xiàn)性能會(huì)有很大的損失变勇,那么有沒有比較好的解決方法來提高性能的基礎(chǔ)上也能達(dá)到預(yù)期的效果呢恤左?
之后會(huì)跟大家分享下MVCC的知識(shí)。