若是想了解spring 的隔離級別,首先要明白幾個概念 spring
髒讀:一事務對數據進行了增刪改,但未提交,另外一事務能夠讀取到未提交的數據。若是第一個事務這時候回滾了,那麼第二個事務就讀到了髒數據。數據庫
不可重複讀:一個事務中發生了兩次讀操做,第一次讀操做和第二次操做之間,另一個事務對數據進行了修改,這時候兩次讀取的數據是不一致的。事務
幻讀:第一個事務對必定範圍的數據進行批量修改,第二個事務在這個範圍增長一條數據,這時候第一個事務就會丟失對新增數據的修改。it
其實我一直喜歡 從系統級別了解一下事物實現的原理,但願有識之士可以幫忙解答?io
數據庫自己的隔離級別table
隔離級別 隔離級別的值 致使的問題原理
Read-Uncommitted 0 致使髒讀數據
Read-Committed 1 避免髒讀,容許不可重複讀和幻讀tab
Repeatable-Read 2 避免髒讀,不可重複讀,容許幻讀co
Serializable 3 串行化讀,事務只能一
Spring中的隔離級別
常量 解釋
ISOLATION_DEFAULT 這是個 PlatfromTransactionManager 默認的隔離級別,使用數據庫默認的事務隔離級別。另外四個與 JDBC 的隔離級別相對應。
ISOLATION_READ_UNCOMMITTED 這是事務最低的隔離級別,它充許另一個事務能夠看到這個事務未提交的數據。這種隔離級別會產生髒讀,不可重複讀和幻像讀。
ISOLATION_READ_COMMITTED 保證一個事務修改的數據提交後才能被另一個事務讀取。另一個事務不能讀取該事務未提交的數據。
ISOLATION_REPEATABLE_READ 這種事務隔離級別能夠防止髒讀,不可重複讀。可是可能出現幻像讀。
ISOLATION_SERIALIZABLE 這是花費最高代價可是最可靠的事務隔離級別。事務被處理爲順序執行。