一.mysql事件隔離級別 1未提交讀(READUNCOMMITTED) 另一個事務修改了數據,但尚未提交,而本事務中的SELECT會讀到這些未被提交的數據(臟讀)( 隔離級別最低,併發性能高 ) 2..提交讀(READCOMMITTED) 本事務讀取到的是最新的數據(其他事務提交後的)。問題是,在 ...
一.mysql事件隔離級別
1未提交讀(READUNCOMMITTED)
另一個事務修改了數據,但尚未提交,而本事務中的SELECT會讀到這些未被提交的數據(臟讀)( 隔離級別最低,併發性能高 )
2..提交讀(READCOMMITTED)
本事務讀取到的是最新的數據(其他事務提交後的)。問題是,在同一個事務里,前後兩次相同的SELECT會讀到不同的結果(不重覆讀)。會出現不可重覆讀、幻讀問題(鎖定正在讀取的行)
3.可重覆讀(REPEATABLEREAD)
在同一個事務里,SELECT的結果是事務開始時時間點的狀態,因此,同樣的SELECT操作讀到的結果會是一致的。但是,會有幻讀現象(稍後解釋)。會出幻讀(鎖定所讀取的所有行)
4.串列化(SERIALIZABLE)
讀操作會隱式獲取共用鎖,可以保證不同事務間的互斥(鎖表)
二.臟讀、不可重覆讀、幻讀、復讀
1.臟讀
當前事務讀到的數據是別的事務想要修改成為的但是沒有修改成功的數據
2.不可重覆讀
當前事務先進行了一次數據讀取,然後再次讀取到的數據是別的事務修改成功的數據,導致兩次讀取到的數據不匹配,也就照應了不可重覆讀的語義
3.幻讀
當前事務讀第一次取到的數據比後來讀取到數據條目少或者增加,針對數據的刪與增
4.復讀
當前事務先進行了一次數據讀取,然後再次讀取到的數據是別的事務修改之前的數據,兩次數據相同