所謂隔離性級別,就是指給一個事務(一旦開始)多大的權限,對本身的讀寫有怎樣的限制。數據庫
另外,隔離性級別是針對一個數據庫系統中全部事務而言的。對於多個併發的事務來講,彼此之間互相都是『其它的事務』。A不容許B作的事情,在B看來也是本身對A的限制。併發
不少文章把『隔離性級別』和『在某種隔離性級別下可能的對數據一致性的風險』這兩件事寫在一塊兒,不做區隔,天然而然讓人頭大。性能
可能的風險是指可能性,只要有可能就會寫下來。有時候有人會想,怎麼可能會有這樣的操做呢?這操做會是什麼具體的場景?這是可有可無的。實際上,這種操做真的出如今實際生活和場景中的出現率極低,也正所以這些級別儘管存在風險但仍被採用以追求數據庫的效率。事務
『幻讀 虛讀 phantom read』,『髒讀 dirty read』和『不可重複讀 non-repeatble read』均不是任何隔離級別的別稱,而是對某種可能的風險的歸納性名稱。it
按本文順序由上往下所對應的級別的可能風險的危害愈來愈大,併發程度愈來愈高,限制愈來愈少。而且下一級的可能風險必定包含上一級的可能風險,只是再也不寫出。table
運行中的事務的權限最大,能夠而且必須阻止其它任何事務的發生。因爲別的事務根本沒法發生,因此並不須要限制本身的讀寫,能夠認爲沒有限制。效率
可能的風險:沒有風險。權限
運行中的事務不能阻止其它事務併發地同時運轉,但本身讀取到的記錄對其它事務徹底屏蔽,但不由止其它事務訪問本身在使用的表和其它記錄。統計
可能的風險:對於被事務操做的數據不會出問題,但數據所在的表以及其它數據可能會變的和事務剛開始讀數據時的不同,即幻讀、虛讀。數據
這一級別的可能的風險的危害不大,但相比於強制串行化,容許了併發,帶來了性能上的提高,因此這一級別被普遍使用。
運行中的事務不能阻止其它事務併發地同時運轉,對其它事務禁止對本身讀取到的數據的修改,但不由止讀取。
可能的風險:事務t1讀取數據A後,事務t2能夠讀到數據A的值但不能修改,等到事務t1提交結束後,事務t2手上的數據A的值已通過時(被變動)了。又或者說事務t2在事務t1先後兩次讀數據A的結果不同,即不可重複讀。
這一級別的可能的風險危害已經嚴重了一些,但其帶來了更高的併發性,也有采用。
事務彼此之間徹底沒有限制。
可能的風險:倉庫管理員統計倉庫中鋼鐵的數量(事務t1),此時一個車隊拉了一噸鋼鐵進倉庫(事務t2),致使倉庫管理員認爲鋼鐵倉庫數量足夠,結束統計(結束事務t1)。但車隊進了倉庫以後沒有停留就開走了(事務t2未提交而且事務t2失敗了而且回滾了),致使倉庫中鋼鐵數量根本不夠。這種讀取到了一個還未提交的事務讀寫的讀寫的行爲,即爲髒讀。
其風險發生的可能性高,危害程度大,即使併發性再好也不容許,不被任何數據庫系統採用。