spring事務
事務屬性的種類:
1傳播行為,2隔離級別,3只讀和事務超時。
????傳播行為定義了被調(diào)用方法的事務邊界
1傳播行為和它的意義:
p..._required(必須的):必須要有一個事務,沒有則新建一個事務
p..._required_new:必須新建事務,如果當前存在事務,把當前事務掛起
propergation_mandatory(強制的),方法必須運行在一個事務中,沒有事務就拋異常
propergation_nested(嵌套),方法應當運行在一個嵌套事務中
propergation_never(絕不),絕不能有事務,否則拋異常
p。。_supported(支持),當支持(使用)當前事務,如果不存在事務就不使用事務,沒有事務就以非事務方式執(zhí)行
p.._not_suppprted,不支持事務,存在事務則方法被掛起
2隔離級別
操作數(shù)據(jù)時可能帶來三個副作用,分別是臟讀,不可重復讀,幻讀
臟讀:舉個例子,如果你正在讀數(shù)據(jù)庫內(nèi)容,而我現(xiàn)在修改了數(shù)據(jù)庫內(nèi)容還沒有提交,接著我修改后的內(nèi)容沒有提交的情況下被你讀到了,就叫臟讀.
不可重復讀:舉個例子,比如你正在讀數(shù)據(jù)庫內(nèi)容,而我update數(shù)據(jù)庫后提交了,你又讀了一次數(shù)據(jù)庫內(nèi)容,這時出現(xiàn)兩個內(nèi)容不同的結果,這叫不可重復讀.
幻讀:舉個例子,比如你正在讀數(shù)據(jù)庫內(nèi)容,而我insert數(shù)據(jù)庫后提交了,你又讀了一次數(shù)據(jù)庫內(nèi)容,這時你看到內(nèi)容出現(xiàn)了多一條數(shù)據(jù),這叫幻讀.
為了避免這三種副作用,sql語句定義了4種隔離級別,分別是未提交讀,已提交讀,可重復讀,可序列化。
spring事務中提供了五種隔離級別來對應sql中的4種隔離級別
????????隔離級別——意義:
isolation_default:使用后端數(shù)據(jù)庫默認的隔離級別
i_uncommitted:允許讀取未提交的數(shù)據(jù)(對應未提交讀),可能導致臟,幻,不可重復
i_committed:允許讀取已經(jīng)提交的數(shù)據(jù)(對應已提交讀),防臟讀,但無法避免:不可重復讀和幻讀
i_repeatable_read:一個事務無法更新由另一個事務修改但未提交(回滾)的數(shù)據(jù)(對應可重復讀),但無法避免幻讀。
i_serializable:所有事務都在一個執(zhí)行隊列中,依次執(zhí)行,無法并行(對應可序列化)。可避免臟幻不可重復讀。但效率很低。