1.READ UNCOMMITTED(未提交讀)
事務中的修改,即使沒有提交,對其他事務也都是可見的。
事務可以讀取未提交的數據,即髒讀(Dirty Read)。
實際應用中很少使用。
2.READ COMMITTED(提交讀)
一個事務從開始到提交之前,所做的任何修改對其他事務都是不可見的,有時也叫不可重複讀。
3.REPEATABLE READ(可重複讀)
是MySQL的默認事務隔離級別。
在同一事務中,多次讀取同樣記錄的結果是一致的。
無法解決幻讀(當某個事務在讀取某個範圍內的記錄時,另外一個事務又在該範圍內插入了新的記錄,當之前的事務再次讀取該範圍內的記錄時,會產生幻行。)的問題。
InnoDB通過多版本併發控制解決了幻讀的問題。
4.SERIALIZABLE(可串行化)
是最高的隔離級別。它通過強制事務串行執行,避免了幻讀的問題
隔離級別 | 髒讀可能性 | 不可重複讀可能性 | 幻讀可能性 | 加鎖讀 |
---|---|---|---|---|
READ UNCOMMITTED | YES | YES | YES | NO |
READ COMMITTED | NO | YES | YES | NO |
REPEATABLE READ | NO | NO | YES | NO |
SERIALIZABLE | NO | NO | NO | YES |