這是我在網上找的,加上自己的理解:
髒讀:(同時操作都沒提交的讀取)
髒讀又稱無效資料讀出。一個事務讀取另外一個事務還沒有提交的資料叫髒讀。
例如:事務T1修改了一行資料,但是還沒有提交,這時候事務T2讀取了被事務T1修改後的資料,之後事務T1因為某種原因Rollback了,那麼事務T2讀取的資料就是髒的。
解決辦法:把資料庫的事務隔離級別調整到READ_COMMITTED
不可重複讀:(同時操作,事務一分別讀取事務二操作時和提交後的資料,讀取的記錄內容不一致)
不可重複讀是指在同一個事務內,兩個相同的查詢返回了不同的結果。
例如:事務T1讀取某一資料,事務T2讀取並修改了該資料,T1為了對讀取值進行檢驗而再次讀取該資料,便得到了不同的結果。 解決辦法:把資料庫的事務隔離級別調整到REPEATABLE_READ
例如:系統管理員A將資料庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入(注意時插入或者刪除,不是修改))了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣。這就叫幻讀。
解決辦法:把資料庫的事務隔離級別調整到SERIALIZABLE_READ
透過在寫的時候加鎖,可以解決髒讀。
透過在讀的時候加鎖,可以解決不可重複讀。
透過序列化,可以解決幻讀。
這是我在網上找的,加上自己的理解:
髒讀:(同時操作都沒提交的讀取)
髒讀又稱無效資料讀出。一個事務讀取另外一個事務還沒有提交的資料叫髒讀。
例如:事務T1修改了一行資料,但是還沒有提交,這時候事務T2讀取了被事務T1修改後的資料,之後事務T1因為某種原因Rollback了,那麼事務T2讀取的資料就是髒的。
解決辦法:把資料庫的事務隔離級別調整到READ_COMMITTED
不可重複讀:(同時操作,事務一分別讀取事務二操作時和提交後的資料,讀取的記錄內容不一致)
不可重複讀是指在同一個事務內,兩個相同的查詢返回了不同的結果。
例如:事務T1讀取某一資料,事務T2讀取並修改了該資料,T1為了對讀取值進行檢驗而再次讀取該資料,便得到了不同的結果。 解決辦法:把資料庫的事務隔離級別調整到REPEATABLE_READ
例如:系統管理員A將資料庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入(注意時插入或者刪除,不是修改))了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣。這就叫幻讀。
解決辦法:把資料庫的事務隔離級別調整到SERIALIZABLE_READ
透過在寫的時候加鎖,可以解決髒讀。
透過在讀的時候加鎖,可以解決不可重複讀。
透過序列化,可以解決幻讀。