Spring事務(wù)

什么是事務(wù): 事務(wù)邏輯上的一組操作,組成這組操作的各個(gè)邏輯單元,要么一起成功,要么一起失敗.
二、事務(wù)特性(4種): ?
原子性 (atomicity):強(qiáng)調(diào)事務(wù)的不可分割. ?
一致性 (consistency):事務(wù)的執(zhí)行的前后數(shù)據(jù)的完整性保持一致. ?
隔離性 (isolation):一個(gè)事務(wù)執(zhí)行的過(guò)程中,不應(yīng)該受到其他事務(wù)的干擾 ?
持久性(durability) :事務(wù)一旦結(jié)束,數(shù)據(jù)就持久到數(shù)據(jù)庫(kù)
如果不考慮隔離性引發(fā)安全性問(wèn)題: ?
臟讀 :一個(gè)事務(wù)讀到了另一個(gè)事務(wù)的未提交的數(shù)據(jù)
不可重復(fù)讀 :一個(gè)事務(wù)讀到了另一個(gè)事務(wù)已經(jīng)提交的 update 的數(shù)據(jù)導(dǎo)致多次查詢結(jié)果不一致. ?
虛幻讀 :一個(gè)事務(wù)讀到了另一個(gè)事務(wù)已經(jīng)提交的 insert 的數(shù)據(jù)導(dǎo)致多次查詢結(jié)果不一致.
三、解決讀問(wèn)題: 設(shè)置事務(wù)隔離級(jí)別(5種) ?
DEFAULT 這是一個(gè)PlatfromTransactionManager默認(rèn)的隔離級(jí)別,使用數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔 離級(jí)別. ?
未提交讀(read uncommited) :臟讀,不可重復(fù)讀,虛讀都有可能發(fā)生 ?
已提交讀 (read commited):避免臟讀。但是不可重復(fù)讀和虛讀有可能發(fā)生
可重復(fù)讀 (repeatable read) :避免臟讀和不可重復(fù)讀.但是虛讀有可能發(fā)生. ?
串行化的 (serializable) :避免以上所有讀問(wèn)題. ?
Mysql 默認(rèn):可重復(fù)讀 ?
Oracle 默認(rèn):讀已提交
四、事務(wù)的傳播行為 ?
PROPAGION_XXX :事務(wù)的傳播行為 ?
保證同一個(gè)事務(wù)中 ?
PROPAGATION_REQUIRED 支持當(dāng)前事務(wù),如果不存在 就新建一個(gè)(默認(rèn)) ?
PROPAGATION_SUPPORTS 支持當(dāng)前事務(wù),如果不存在,就不使用事務(wù) ?
PROPAGATION_MANDATORY 支持當(dāng)前事務(wù),如果不存在,拋出異常 ?
保證沒(méi)有在同一個(gè)事務(wù)中 ?
PROPAGATION_REQUIRES_NEW 如果有事務(wù)存在,掛起當(dāng)前事務(wù),創(chuàng)建一個(gè)新的事務(wù) ?
PROPAGATION_NOT_SUPPORTED 以非事務(wù)方式運(yùn)行,如果有事務(wù)存在,掛起當(dāng)前事務(wù) ?
PROPAGATION_NEVER 以非事務(wù)方式運(yùn)行,如果有事務(wù)存在,拋出異常 ?
PROPAGATION_NESTED 如果當(dāng)前事務(wù)存在,則嵌套事務(wù)執(zhí)行