MySQL—隔离级别
READ UNCOMMITED(讀未提交)
即讀取到了正在修改但是卻還沒有提交的數(shù)據(jù),這就會造成數(shù)據(jù)讀取的錯誤。
READ COMMITED(提交讀/不可重復(fù)讀)
它與READ UNCOMMITED的區(qū)別在于,它規(guī)定讀取的時候讀到的數(shù)據(jù)只能是提交后的數(shù)據(jù)。
這個級別所帶來的問題就是不可重復(fù)讀。即上一個時間讀取到的a的值是1,但是隨著修改線程對事務(wù)的提交,a的值變?yōu)榱?,這時候讀到的值就是2了,即執(zhí)行兩次相同的讀取操作得到的值卻不一樣。
REPEATED READ(可重復(fù)讀)
它是MySQL數(shù)據(jù)庫的默認(rèn)隔離級別。簡單來說就是在一個事務(wù)的執(zhí)行期間禁止其他事務(wù)對相應(yīng)的數(shù)據(jù)進(jìn)行修改,這就徹底使得一個事務(wù)的執(zhí)行過程中所查詢到的數(shù)據(jù)一定是一致的,即解決了臟讀和不可重復(fù)讀的問題,但是卻帶來了新的問題,即“幻讀”。
“幻讀”指的是在一個事務(wù)執(zhí)行過程中雖然禁止了對相應(yīng)數(shù)據(jù)的修改,但是其他的事務(wù)依然可以插入數(shù)據(jù),這時候第一個事務(wù)就會發(fā)現(xiàn)會“莫名其妙”多出來一些數(shù)據(jù),像是出現(xiàn)了幻覺似的。幻讀和不可重復(fù)讀都是讀取了另一條已經(jīng)提交的事務(wù)(這點(diǎn)同臟讀不同),所不同的是不可重復(fù)讀查詢的都是同一個數(shù)據(jù)項(xiàng),而幻讀針對的是一批數(shù)據(jù)整體(比如數(shù)據(jù)的個數(shù))。
SERIALIZABLE (可串行化)
這是最嚴(yán)格的一個隔離級別。它通過強(qiáng)制事務(wù)串行執(zhí)行,避免了幻讀的問題。
參考鏈接
總結(jié)
以上是生活随笔為你收集整理的MySQL—隔离级别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到马被水淹死了是什么意思
- 下一篇: MySQL-InnoDB索引实现