在談論數據庫的時候,咱們老是但願它的查詢性能更快一些,並行事務更多一些,然而在另外一方面,卻也在擔心數據同步、髒讀、延遲帶來的數據混亂。。。數據庫
原子性指的是,數據的某個狀態A,到狀態B的操做是一步到位的,叫作原子性。對於數據庫的事務操做, 在底層硬件的實現包括軟件過程的層面確定不是原子性的,不過數據庫在設計中保證了同一事務中的 各類操做的共同成功,共同失敗,因此能夠理解爲一步操做。
- Concurrency(一致性)
一致性指的是,對於操做同一數據單元的多個事務,對該數據單元的可見結果是一致的。所謂同一數據單元, 根據數據操做不一樣,多是一張表,多是一行記錄,多是其餘的在並行事務中同時操做的數據。
- Isolation(隔離性)
隔離性指的是,對某個數據單元,某個事務在操做的時候,其餘並行事務對數據單元不具有操做權限。 這個能夠從程序實現的角度理解爲不一樣線程訪問統一資源的同步特性。
- Durabilily(持久性)
持久性指的是,數據庫對於從狀態A到狀態B的改變是持久的,不變的。
隔離級別能夠理解爲並行事務操做同一數據單元時候的執行次序。
- Read Uncommitted
一個事務進行更新數據操做時,無需提交當前操做結果,其餘並行事務就能夠讀取當前操做數據單元的數據。 注意: 這樣會形成數據的不一樣步,可是對於某些無需數據同步的場景效率能夠提升。好比,一個電商產品 評論的業務中,一個用戶在評論商品,與此同時其餘用戶在查看評論,無需插入操做提交就能夠容許讀, 由於沒必要關心。
- Read Committed
一個事務進行更新數據操做時,必須提交當前操做結果以後,其餘並行事務才能夠讀取當前操做數據單元的數據。
- Repeatable Read
同一事務中,在查詢同一個語句的時候,所得到的結果是同樣的,(也就是有事務緩存的?這個有待 考證),統一與事務開始時候得到的結果一致。
- Serializable
一個事務在進行的時候,其餘事務均不可訪問該數據單元。簡單粗暴,性能低下。不過在要求數據嚴格一致的狀況下 是最有效的方式。