MySQL 四種事務(wù)隔離級(jí)別詳解及對(duì)比
按照SQL:1992 事務(wù)隔離級(jí)別,InnoDB默認(rèn)是可重復(fù)讀的(REPEATABLE READ)。MySQL/InnoDB 提供SQL標(biāo)準(zhǔn)所描述的所有四個(gè)事務(wù)隔離級(jí)別。你可以在命令行用--transaction-isolation選項(xiàng),或在選項(xiàng)文件里,為所有連接設(shè)置默認(rèn)隔離級(jí)別。
例如,你可以在my.inf文件的[mysqld]節(jié)里類似如下設(shè)置該選項(xiàng):
| transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE} | 
用戶可以用SET TRANSACTION語句改變單個(gè)會(huì)話或者所有新進(jìn)連接的隔離級(jí)別。它的語法如下:
| SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} | 
注意:默認(rèn)的行為(不帶session和global)是為下一個(gè)(未開始)事務(wù)設(shè)置隔離級(jí)別。如果你使用GLOBAL關(guān)鍵字,語句在全局對(duì)從那點(diǎn)開始創(chuàng)建的所有新連接(除了不存在的連接)設(shè)置默認(rèn)事務(wù)級(jí)別。你需要SUPER權(quán)限來做這個(gè)。使用SESSION 關(guān)鍵字為將來在當(dāng)前連接上執(zhí)行的事務(wù)設(shè)置默認(rèn)事務(wù)級(jí)別。 任何客戶端都能自由改變會(huì)話隔離級(jí)別(甚至在事務(wù)的中間),或者為下一個(gè)事務(wù)設(shè)置隔離級(jí)別。
你可以用下列語句查詢?nèi)趾蜁?huì)話事務(wù)隔離級(jí)別:
| SELECT @@global.tx_isolation;SELECT @@session.tx_isolation;SELECT @@tx_isolation; | 
----以上手冊(cè)中的理論知識(shí);
===========================================================================================
       隔離級(jí)別               臟讀(Dirty Read)          不可重復(fù)讀(NonRepeatable Read)     幻讀(Phantom Read) 
===========================================================================================
未提交讀(Read uncommitted) 可能 可能 可能
已提交讀(Read committed) 不可能 可能 可能
可重復(fù)讀(Repeatable read) 不可能 不可能 可能
新聞熱點(diǎn)
疑難解答
圖片精選