事務(wù)并發(fā)可能會引起以下幾種問題
1、臟讀
事務(wù)B讀到了事務(wù)A未提交的事務(wù)名秀。
2、幻讀
幻讀.png
新增一個用戶也會發(fā)生幻讀藕溅,同理匕得。
3、不可重復(fù)讀
不可重復(fù)讀.png
和幻讀類似巾表,不過是對不可重復(fù)讀是對數(shù)據(jù)的更新汁掠,而幻讀是對數(shù)據(jù)的新增或者刪除略吨。
4、第一類丟失更新(回滾丟失)
回滾丟失.png
事務(wù)A的回滾覆蓋了事務(wù)B的修改操作考阱,造成了數(shù)據(jù)異常晋南。
5、第二類丟失更新(提交丟失)
提交丟失.png
事務(wù)A的提交覆蓋了事務(wù)B的修改操作羔砾,造成了數(shù)據(jù)異常负间。和回滾丟失很類似,不過是事務(wù)提交覆蓋了數(shù)據(jù)姜凄。
為了解決事務(wù)的并發(fā)問題政溃,mysql提供了四種隔離級別。
隔離級別.png
Repeatable Read(可重讀):這是MySQL的默認事務(wù)隔離級別态秧,mysql自身解決了幻讀和第一類丟失更新的問題董虱。所以mysql只存在提交丟失。
怎么解決提交丟失問題申鱼?
1愤诱、悲觀鎖:select ... for update
2、樂觀鎖:使用版本號機制捐友。
存留的疑問:mysql怎樣解決的幻讀和第一類丟失更新的問題淫半?