MySQL 數(shù)據(jù)庫(kù)中有一個(gè)隔離級(jí)別叫做“讀未提交(Read Uncommitted)”。這個(gè)隔離級(jí)別在一些場(chǎng)景下比較適用。
讀未提交的意思是,一個(gè)事務(wù)可以讀取另一個(gè)事務(wù)未提交的數(shù)據(jù)。這個(gè)隔離級(jí)別在讀取數(shù)據(jù)比較頻繁,而且那些數(shù)據(jù)的修改并不會(huì)對(duì)結(jié)果產(chǎn)生太大影響的場(chǎng)景下比較適用。比如說,我們?cè)谝粋€(gè)在線游戲中需要頻繁讀取玩家的信息,比如金幣數(shù)量,頭銜等級(jí)等。這些數(shù)據(jù)一般需要的是粗略的信息,而且修改頻率也不會(huì)太高。即使有一些數(shù)據(jù)讀取出來的信息是已經(jīng)被修改過的,對(duì)游戲的正常運(yùn)行沒有太大影響。
下面是一個(gè)簡(jiǎn)單的使用 MySQL 讀未提交的例子:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(*) FROM user WHERE username LIKE '%john%';
上面的命令會(huì)將當(dāng)前事務(wù)的隔離級(jí)別設(shè)置為“讀未提交”,然后粗略地統(tǒng)計(jì)所有用戶名中包含“john”的用戶數(shù)量。由于隔離級(jí)別設(shè)置為“讀未提交”,所以這個(gè)數(shù)量可能是已經(jīng)被其他事務(wù)修改過的數(shù)值。
需要注意的是,除非特別需要,否則不建議在使用 MySQL 數(shù)據(jù)庫(kù)時(shí)隨意使用“讀未提交”隔離級(jí)別。這個(gè)隔離級(jí)別可能會(huì)導(dǎo)致數(shù)據(jù)的不一致性,以及由此產(chǎn)生的其他問題。