1镐作,事務(wù)定義
事務(wù):一個最小的不可再分的工作單元藏姐;通常一個事務(wù)對應(yīng)一個完整的業(yè)務(wù)(例如銀行賬戶轉(zhuǎn)賬業(yè)務(wù)该贾,該業(yè)務(wù)就是一個最小的工作單元)
一個完整的業(yè)務(wù)需要批量的DML(insert、update娃属、delete)語句共同聯(lián)合完成
事務(wù)只和DML語句有關(guān)矾端,或者說DML語句才有事務(wù)掏击。這個和業(yè)務(wù)邏輯有關(guān),業(yè)務(wù)邏輯不同殴玛,DML語句的個數(shù)不同
2捅膘,事務(wù)的四大特性(ACID)
1、原子性(Atomicity):事務(wù)開始后所有操作滚粟,要么全部做完寻仗,要么全部不做,不可能停滯在中間環(huán)節(jié)凡壤。事務(wù)執(zhí)行過程中出錯署尤,會回滾到事務(wù)開始前的狀態(tài),所有的操作就像沒有發(fā)生一樣亚侠。也就是說事務(wù)是一個不可分割的整體曹体,就像化學中學過的原子,是物質(zhì)構(gòu)成的基本單位硝烂。
2箕别、一致性(Consistency):事務(wù)開始前和結(jié)束后,數(shù)據(jù)庫的完整性約束沒有被破壞 。比如A向B轉(zhuǎn)賬串稀,不可能A扣了錢啥酱,B卻沒收到。
3厨诸、隔離性(Isolation):同一時間镶殷,只允許一個事務(wù)請求同一數(shù)據(jù),不同的事務(wù)之間彼此沒有任何干擾微酬。比如A正在從一張銀行卡中取錢绘趋,在A取錢的過程結(jié)束前,B不能向這張卡轉(zhuǎn)賬颗管。
4陷遮、持久性(Durability):事務(wù)完成后,事務(wù)對數(shù)據(jù)庫的所有更新將被保存到數(shù)據(jù)庫垦江,不能回滾帽馋。
3,事務(wù)的隔離級別
讀已提交(read-committed)解決了臟讀,但是兩次讀取的結(jié)果可能會不一致比吭,第三個隔離級別 可重復(fù)讀(repeatable-read) 解決了多次查詢結(jié)果都是一樣的問題绽族,但是對于如果事務(wù)執(zhí)行期間有其他事務(wù)插入新數(shù)據(jù),此時會產(chǎn)生幻讀衩藤,即明明當前事務(wù)查詢沒有這條結(jié)果吧慢,理應(yīng)可以在當前事務(wù)進行新增操作,但是卻提示記錄已存在不能插入相同主鍵記錄赏表,這就是幻讀检诗,或者修改明明是全表update,但是執(zhí)行成功后再進行查詢卻發(fā)現(xiàn)還有一條記錄沒有更新成功瓢剿,好像見鬼了一樣砾赔,這也是幻讀桥氏。
1音诫、 read uncommitted
- 事物A和事物B竣付,事物A未提交的數(shù)據(jù),事物B可以讀取到
- 這里讀取到的數(shù)據(jù)叫做“臟數(shù)據(jù)”
- 這種隔離級別最低前标,這種級別一般是在理論上存在坠韩,數(shù)據(jù)庫隔離級別一般都高于該級別
2、read committed
- 事物A和事物B炼列,事物A提交的數(shù)據(jù)只搁,事物B才能讀取到
- 這種隔離級別高于讀未提交
- 換句話說,對方事物提交之后的數(shù)據(jù)俭尖,我當前事物才能讀取到
- 這種級別可以避免“臟數(shù)據(jù)”
- 這種隔離級別會導致“不可重復(fù)讀取”
- Oracle默認隔離級別
3氢惋、repeatable read
- 事務(wù)A和事務(wù)B洞翩,事務(wù)A提交之后的數(shù)據(jù),事務(wù)B讀取不到
- 事務(wù)B是可重復(fù)讀取數(shù)據(jù)
- 這種隔離級別高于讀已提交
- 換句話說焰望,對方提交之后的數(shù)據(jù)骚亿,我還是讀取不到
- 這種隔離級別可以避免“不可重復(fù)讀取”,達到可重復(fù)讀取
- 比如1點和2點讀到數(shù)據(jù)是同一個
- MySQL默認級別
- 雖然可以達到可重復(fù)讀取熊赖,但是會導致“幻像讀”
4来屠、serializable
- 事務(wù)A和事務(wù)B,事務(wù)A在操作數(shù)據(jù)庫時震鹉,事務(wù)B只能排隊等待
- 這種隔離級別很少使用俱笛,吞吐量太低,用戶體驗差
- 這種級別可以避免“幻像讀”传趾,每一次讀取的都是數(shù)據(jù)庫中真實存在數(shù)據(jù)迎膜,事務(wù)A與事務(wù)B串行,而不并發(fā)