mysql中一共有4種隔離級(jí)別(因?yàn)橹挥蠭nnoDB引擎支持事務(wù),所以也可以說(shuō)是InnoDB的事務(wù)隔離級(jí)別)
隔離級(jí)別的實(shí)現(xiàn)是基于MVCC方案以及鎖機(jī)制宫峦,此文僅作為隔離級(jí)別的參考售貌,所以就不過(guò)多介紹了
1 讀未提交 READ UNCOMMITTED
該模式允許讀取其它事務(wù)并未提交的數(shù)據(jù)渊涝,會(huì)引起臟讀(讀到了其它事務(wù)未提交的數(shù)據(jù))囤锉,如果沒(méi)有必要的需求丈莺,不應(yīng)該使用
2 讀已提交(也叫不可重復(fù)讀) READ COMMITTED
該模式只會(huì)讀取其它事務(wù)提交后的結(jié)果屯耸,但是如果當(dāng)前事務(wù)中存在多次同樣的查詢(xún)拐迁,有可能會(huì)出現(xiàn)結(jié)果不一致(因?yàn)橹虚g其它事務(wù)修改了數(shù)據(jù))
3 可重復(fù)讀 REPEATABLE READ
相比較不可重復(fù)讀,此模式保證了數(shù)據(jù)在當(dāng)前事務(wù)中的不變性疗绣,即使其他事務(wù)修改了數(shù)據(jù)线召。
但是與不可重復(fù)讀一樣,它們都可能會(huì)產(chǎn)生幻讀(其它事務(wù)為表格增加了新的數(shù)據(jù)條目多矮,導(dǎo)致出現(xiàn)當(dāng)前事務(wù)中多個(gè)同樣的涉及到條數(shù)的查詢(xún)結(jié)果條數(shù)不一致)
該模式是mysql的默認(rèn)隔離級(jí)別
4 序列化 SERIALIZABLE
此模式將事務(wù)串行化執(zhí)行缓淹,不會(huì)出現(xiàn)任何并發(fā)問(wèn)題
修改隔離級(jí)別命令:
set session transaction isolation level "隔離級(jí)別"
例如:
set session transaction isolation level READ COMMITTED