spring事務(wù)配置
mark網(wǎng)址
http://m.blog.csdn.net/article/details?id=5074371
事務(wù)配置,先理解事務(wù),事務(wù)特性ACID ,看看數(shù)據(jù)庫(kù)是不是支持事務(wù)管理的
事務(wù)有事務(wù)的隔離特性 事務(wù)的傳播特性
1、Serializable:最嚴(yán)格的級(jí)別,事務(wù)串行執(zhí)行,資源消耗最大;
2、REPEATABLE READ:保證了一個(gè)事務(wù)不會(huì)修改已經(jīng)由另一個(gè)事務(wù)讀取但未提交(回滾)的數(shù)據(jù)。避免了“臟讀取”和“不可重復(fù)讀取”的情況,但是帶來(lái)了更多的性能損失。
3、READ COMMITTED:大多數(shù)主流數(shù)據(jù)庫(kù)的默認(rèn)事務(wù)等級(jí),保證了一個(gè)事務(wù)不會(huì)讀到另一個(gè)并行事務(wù)已修改但未提交的數(shù)據(jù),避免了“臟讀取”。該級(jí)別適用于大多數(shù)系統(tǒng)。
4、Read Uncommitted:保證了讀取過(guò)程中不會(huì)讀取到非法數(shù)據(jù)。隔離級(jí)別在于處理多事務(wù)的并發(fā)問(wèn)題
一般數(shù)據(jù)庫(kù)默認(rèn)read committed 是基于數(shù)據(jù)正確性 和性能兩個(gè)方面考慮
理解這些隔離級(jí)別,先要理解數(shù)據(jù)庫(kù)的幾種不一致的情況
臟讀
臟讀又稱無(wú)效數(shù)據(jù)讀出。一個(gè)事務(wù)讀取另外一個(gè)事務(wù)還沒(méi)有提交的數(shù)據(jù)叫臟讀。 例如:事務(wù)T1修改了一行數(shù)據(jù),但是還沒(méi)有提交,這時(shí)候事務(wù)T2讀取了被事務(wù)T1修改后的數(shù)據(jù),之后事務(wù)T1因?yàn)槟撤N原因Rollback了,那么事務(wù)T2讀取的數(shù)據(jù)就是臟的。 解決辦法:把數(shù)據(jù)庫(kù)的事務(wù)隔離級(jí)別調(diào)整到READ_COMMITTED不可重復(fù)讀
不可重復(fù)讀是指在同一個(gè)事務(wù)內(nèi),兩個(gè)相同的查詢返回了不同的結(jié)果。 例如:事務(wù)T1讀取某一數(shù)據(jù),事務(wù)T2讀取并修改了該數(shù)據(jù),T1為了對(duì)讀取值進(jìn)行檢驗(yàn)而再次讀取該數(shù)據(jù),便得到了不同的結(jié)果。 解決辦法:把數(shù)據(jù)庫(kù)的事務(wù)隔離級(jí)別調(diào)整到REPEATABLE_READ幻讀
例如:系統(tǒng)管理員A將數(shù)據(jù)庫(kù)中所有學(xué)生的成績(jī)從具體分?jǐn)?shù)改為ABCDE等級(jí),但是系統(tǒng)管理員B就在這個(gè)時(shí)候插入了一條具體分?jǐn)?shù)的記錄,當(dāng)系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒(méi)有改過(guò)來(lái),就好像發(fā)生了幻覺(jué)一樣。這就叫幻讀。 解決辦法:把數(shù)據(jù)庫(kù)的事務(wù)隔離級(jí)別調(diào)整到SERIALIZABLE_READ不可重復(fù)讀 和 幻讀的區(qū)別
不可重復(fù)讀的重點(diǎn)是修改 同樣的條件, 你讀取過(guò)的數(shù)據(jù), 再次讀取出來(lái)發(fā)現(xiàn)值不一樣了
具體的事務(wù)配置見(jiàn)mark地址。一般現(xiàn)在都是使用注解申明式事務(wù)