READ UNCOMMITED(讀未提交)
即讀取到了正在修改但是卻還沒有提交的數據,這就會造成數據讀取的錯誤。
READ COMMITED(提交讀/不可重復讀)
它與READ UNCOMMITED的區別在于,它規定讀取的時候讀到的數據只能是提交后的數據。
這個級別所帶來的問題就是不可重復讀。即上一個時間讀取到的a的值是1,但是隨著修改線程對事務的提交,a的值變為了2,這時候讀到的值就是2了,即執行兩次相同的讀取操作得到的值卻不一樣。
REPEATED READ(可重復讀)
它是MySQL數據庫的默認隔離級別。簡單來說就是在一個事務的執行期間禁止其他事務對相應的數據進行修改,這就徹底使得一個事務的執行過程中所查詢到的數據一定是一致的,即解決了臟讀和不可重復讀的問題,但是卻帶來了新的問題,即“幻讀”。
“幻讀”指的是在一個事務執行過程中雖然禁止了對相應數據的修改,但是其他的事務依然可以插入數據,這時候第一個事務就會發現會“莫名其妙”多出來一些數據,像是出現了幻覺似的。幻讀和不可重復讀都是讀取了另一條已經提交的事務(這點同臟讀不同),所不同的是不可重復讀查詢的都是同一個數據項,而幻讀針對的是一批數據整體(比如數據的個數)。
SERIALIZABLE (可串行化)
這是最嚴格的一個隔離級別。它通過強制事務串行執行,避免了幻讀的問題。
參考鏈接