一、事務(wù)的特性(ACID)
1、原子性(Atomicity)
原子性是指事務(wù)包含的所有操作要么全部成功函匕,要么全部失敗回滾。
2仅叫、一致性(Consistency)
一致性是指事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變換到另一個(gè)一致性狀態(tài),也就是說(shuō)一個(gè)事務(wù)執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)糙捺。
3诫咱、隔離性(Isolation)
隔離性是當(dāng)多個(gè)用戶并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),比如操作同一張表時(shí)洪灯,數(shù)據(jù)庫(kù)為每一個(gè)用戶開(kāi)啟的事務(wù)坎缭,不能被其他事務(wù)的操作所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離签钩。
4掏呼、持久性(Durability)
持久性是指一個(gè)事務(wù)一旦被提交了,那么對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就是永久性的铅檩,即便是在數(shù)據(jù)庫(kù)系統(tǒng)遇到故障的情況下也不會(huì)丟失提交事務(wù)的操作憎夷。
二、事務(wù)的問(wèn)題
1昧旨、臟讀(Dirty Reads)
一個(gè)事務(wù)正在對(duì)數(shù)據(jù)進(jìn)行更新操作拾给,但是更新還未提交,另一個(gè)事務(wù)這時(shí)也來(lái)操作這組數(shù)據(jù)兔沃,并且讀取了前一個(gè)事務(wù)還未提交的數(shù)據(jù)蒋得,而前一個(gè)事務(wù)如果操作失敗進(jìn)行了回滾,后一個(gè)事務(wù)讀取的就是錯(cuò)誤數(shù)據(jù)粘拾,這樣就造成了臟讀窄锅。
2创千、不可重復(fù)讀(Non-Repeatable Reads)
一個(gè)事務(wù)多次讀取同一數(shù)據(jù)缰雇,在該事務(wù)還未結(jié)束時(shí)入偷,另一個(gè)事務(wù)也對(duì)該數(shù)據(jù)進(jìn)行了操作,而且在第一個(gè)事務(wù)兩次次讀取之間械哟,第二個(gè)事務(wù)對(duì)數(shù)據(jù)進(jìn)行了更新疏之,那么第一個(gè)事務(wù)前后兩次讀取到的數(shù)據(jù)是不同的,這樣就造成了不可重復(fù)讀暇咆。
3锋爪、幻讀(Phantom Reads)
第一個(gè)數(shù)據(jù)正在查詢符合某一條件的數(shù)據(jù),這時(shí)爸业,另一個(gè)事務(wù)又插入了一條符合條件的數(shù)據(jù)其骄,第一個(gè)事務(wù)在第二次查詢符合同一條件的數(shù)據(jù)時(shí),發(fā)現(xiàn)多了一條前一次查詢時(shí)沒(méi)有的數(shù)據(jù)扯旷,仿佛幻覺(jué)一樣拯爽,這就是幻讀。
三钧忽、事務(wù)的傳播行為
1毯炮、PROPAGATION_REQUIRED(默認(rèn))
如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)耸黑。如果沒(méi)有事務(wù)則開(kāi)啟一個(gè)新的事務(wù)桃煎。
2、PROPAGATION_MANDATORY
支持當(dāng)前事務(wù)大刊,如果當(dāng)前沒(méi)有事務(wù)为迈,就拋出異常。
3缺菌、PROPAGATION_NEVER
以非事務(wù)方式執(zhí)行曲尸,如果當(dāng)前存在事務(wù),則拋出異常男翰。
4另患、PROPAGATION_NOT_SUPPORTED
以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù)蛾绎,就把當(dāng)前事務(wù)掛起昆箕。
5、PROPAGATION_REQUIRES_NEW
新建事務(wù)租冠,如果當(dāng)前存在事務(wù)鹏倘,把當(dāng)前事務(wù)掛起。
6顽爹、PROPAGATION_SUPPORTS
支持當(dāng)前事務(wù)纤泵,如果當(dāng)前沒(méi)有事務(wù),就以非事務(wù)方式執(zhí)行镜粤。
7捏题、PROPAGATION_NESTED
支持當(dāng)前事務(wù)玻褪,新增Savepoint點(diǎn),與當(dāng)前事務(wù)同步提交或回滾公荧。
四:事務(wù)的隔離級(jí)別
0带射、DEFAULT (默認(rèn))
這是一個(gè)PlatfromTransactionManager默認(rèn)的隔離級(jí)別,使用數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔離級(jí)別.另外四個(gè)與JDBC的隔離級(jí)別相對(duì)應(yīng)
1循狰、READ_UNCOMMITTED (讀未提交)
這是事務(wù)最低的隔離級(jí)別窟社,它允許另外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)。這種隔離級(jí)別會(huì)產(chǎn)生臟讀绪钥,不可重復(fù)讀和幻像讀灿里。
2、READ_COMMITTED (讀已提交)
保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另外一個(gè)事務(wù)讀取程腹。另外一個(gè)事務(wù)不能讀取該事務(wù)未提交的數(shù)據(jù)钠四。這種事務(wù)隔離級(jí)別可以避免臟讀出現(xiàn),但是可能會(huì)出現(xiàn)不可重復(fù)讀和幻像讀跪楞。
3缀去、REPEATABLE_READ (可重復(fù)讀)
這種事務(wù)隔離級(jí)別可以防止臟讀,不可重復(fù)讀甸祭。但是可能出現(xiàn)幻像讀缕碎。它除了保證一個(gè)事務(wù)不能讀取另一個(gè)事務(wù)未提交的數(shù)據(jù)外,還保證了不可重復(fù)讀
4池户、SERIALIZABLE(串行化)
這是花費(fèi)最高代價(jià)但是最可靠的事務(wù)隔離級(jí)別咏雌。事務(wù)被處理為順序執(zhí)行。除了防止臟讀校焦,不可重復(fù)讀外赊抖,還避免了幻像讀。
五寨典、隔離級(jí)別解決事務(wù)并行引起的問(wèn)題
臟讀 | 不可重復(fù)讀 | 幻讀 | |
---|---|---|---|
Serializable | 不會(huì) | 不會(huì) | 不會(huì) |
REPEATABLE READ | 不會(huì) | 不會(huì) | 會(huì) |
READ COMMITTED | 不會(huì) | 會(huì) | 會(huì) |
Read Uncommitted | 會(huì) | 會(huì) | 會(huì) |
注:非原創(chuàng)