mysql默認的事務處理級別是'REPEATABLE-READ',也就是可重複讀html
對於不可重複讀, 在RC下只須要鎖住知足條件的記錄,就能夠避免被其它事務修改,也就是 select for update, select in share mode;mysql
RR隔離下使用MVCC實現可重複讀;(版本控制?怎麼實現的)spring
對於幻讀, 要鎖住知足條件的記錄及全部這些記錄之間的gap,也就是須要 gap lock。sql
知足幻讀所須要的開銷更大,性能更低。markdown
參考:性能
解惑 spring 嵌套事務版本控制
Spring事務傳播機制htm
ps:oschina markdown 不支持 表格 wtfblog
二、是REQUIRES_NEW,若是save()中的代碼拋出異常,而且被捕獲,commit()中的其餘代碼不會roll back;若是commit()中的其餘代碼拋出異常,並且沒有捕獲,不會致使save()回滾圖片
三、是NESTED,若是save()中的代碼拋出異常,而且被捕獲,commit()中的其餘代碼不會roll back;若是commit()中的其餘代碼拋出異常,並且沒有捕獲,會致使save()回滾
REQUIRED、REQUIRES_NEW、NESTED 3個 spring 事務傳播級別使用場景
** NESTED,內部不影響外部事物,外部要影響內部。**