數據庫定義了四種隔離級別:mysql
Read Uncommitted(未提交讀)
Read Committed(提交讀)
Repeatable Read(重複讀)
Serializable(串行化)
這四種隔離依次升高,隔離級別越低,系統開銷越小,併發支持性更高。sql
使用命令show variables like '%isolation%';
能夠查看當前數據庫使用的隔離級別數據庫
在介紹四種隔離級別前先說明三種在使用事務時會出現的特殊(大部分狀況會致使錯誤)讀類型。併發
髒讀
不可重複讀
select count(*) from user where name='alex'
這時事務b插入了一條數據name=alex並提交這就會致使事務a第二次查詢的時候多了一個計數幻讀
'select id from user
獲得的id爲1和2.這個時候b事務在user表中添加了一條數據id=3並提交,而後事務a想添加一條id爲3的數據,若是id是惟一的,那a就會發現插不進去並提示dumplicate entry 3 for key id,緣由是事務a阻止事務b的插入行爲。注意不要混淆不可重複讀和幻讀code
間隙鎖(gap lock)
來實現的,間隙鎖的原理能夠參照這篇文章http://www.jianshu.com/p/bf86... 最後給出四個隔離級別對三種讀類型的對照表:事務
隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
---|---|---|---|
Read Uncommited | 可能 | 可能 | 可能 |
Read Commited | 不可能 | 可能 | 可能 |
Repeatable Read | 不可能 | 不可能 | 可能 |
Serializable | 不可能 | 不可能 | 不可能 |