什么是事務(wù)隔離級別
MySQL中的事務(wù)隔離級別是指多個事務(wù)同時操作同一條記錄時,各自是否能看到其他事務(wù)的未提交或者已提交的修改。MySQL默認采用的隔離級別是可重復(fù)讀(Repeatable Read),同時還支持讀未提交(Read Uncommitted)、讀已提交(Read Committed)和可串行化(Serializable)四種隔離級別。
讀未提交隔離級別
讀未提交隔離級別是指一個事務(wù)可以讀取另外一個事務(wù)還未提交的數(shù)據(jù)。舉個例子,如果用戶A在執(zhí)行UPDATE操作的同時,用戶B正在進行SELECT操作,用戶B此時可以看到用戶A的未提交的UPDATE操作所更新的數(shù)據(jù)。讀未提交隔離級別會導(dǎo)致臟讀問題。
讀已提交隔離級別
讀已提交隔離級別是指一個事務(wù)只能讀取另外一個已經(jīng)提交的事務(wù)的數(shù)據(jù)。舉個例子,如果用戶A在執(zhí)行UPDATE操作的同時,用戶B正在進行SELECT操作,在用戶A提交事務(wù)之前,用戶B是看不到用戶A的更新數(shù)據(jù)的。讀已提交隔離級別能夠避免臟讀問題,但是會導(dǎo)致不可重復(fù)讀問題。
可重復(fù)讀隔離級別
可重復(fù)讀隔離級別是指一個事務(wù)在執(zhí)行期間看到的數(shù)據(jù),與另外一個事務(wù)提交之后看到的數(shù)據(jù)一致。舉個例子,如果用戶A在執(zhí)行SELECT操作的同時,用戶B正在進行UPDATE操作,那么在用戶B提交之前,用戶A即使再次進行SELECT操作也會看到之前的結(jié)果。可重復(fù)讀隔離級別能夠避免臟讀和不可重復(fù)讀問題,但是會導(dǎo)致幻讀問題。
可串行化隔離級別
可串行化隔離級別是指一個事務(wù)在執(zhí)行期間,看到的數(shù)據(jù)和其他事務(wù)提交后看到的數(shù)據(jù)完全一樣,相當(dāng)于把多個事務(wù)串行化執(zhí)行。可串行化隔離級別可以避免所有并發(fā)問題,但是會導(dǎo)致最嚴重的性能問題。