spring事務隔離級別和傳播級別


事務的四大特性

1.原子性

2.一致性

3.隔離性

4.持久性

四種事務隔離級別

1.未提交讀

2.已提交讀

3.可重復讀

4.可串行化

事務隔離要解決三個問題

1.臟讀,讀取到了未提交事務的數據,比如未提交讀就可能會產生這種數據

2.不可重復讀,在同一個事務里兩次讀取的數據不一樣,因為在兩次讀取的過程中,另一個事務提交改變了該值(update操作)。未提交讀,已提交讀又稱為不可重復讀,會產生這種情況。

3.幻讀,與不可重復讀類似,幻讀是兩次查詢的行個數不一樣(針對的是insert操作)。幻讀針對的是多行,不可重復讀針對的是一行或者一個數據。事務隔離級別前三種都可能會產生這種情況。

可串行化三種情況都不會產生,但是效率比較低,他是一個事務執行完畢,才能執行下一個事務。

spring當中設置事務隔離級別@Transcational(Isolation = 'ISOLATION_READ_UNCOMMITTED')類似這種。

 

事務與mysql鎖之間的關系

mysql有三種鎖,表鎖(開銷小,加鎖快,鎖粒度最大,避免死鎖,鎖沖突概率最高,並發最低),行鎖(開銷大,加鎖慢,鎖粒度最小,會出現死鎖,鎖沖突最低,並發最高),頁鎖(介於表鎖與行鎖之間)

使用表鎖的主要是myisam,memory,csv一些非事務型存儲引擎。

使用行鎖的是innodb這種事務引擎。

 

 

未提交讀,鎖住修改的行

可重復讀,

串行化會鎖住整張表

 

spring的七種傳播級別

spring使用手法 @Transcational(propagation = 'XXX')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM