舉個栗子:小明和小剛 同時給小紅轉賬,在資料庫執行的時候,肯定是有乙個先後順序的。注意,這裡就有兩個 事務。它們是在乙個完成了轉賬之後 再進行下乙個轉賬,相互之間不會影響。
隔離性需要重點說下,在稍後會具體介紹、、、、、、
首先講一下我們常用資料庫(我只用過mysql、oracle)為我們提供的事務隔離級別:
從低到高的級別排序:
1.read uncommitted(讀未提交) :最低級別,任何情況都無法保證
2.read committed(讀已提交) : 可避免髒讀的情況發生
3.repeatable read(可重複讀) : 可避免髒讀和不可重複讀
4.serializable (序列化又叫序列化) :最高端別,可避免髒讀、不可重複讀、幻讀的發生。
mysql資料庫的預設隔離級別是:repeatable read 可重複讀 (當然它支援四種隔離級別)
oracle資料庫的預設隔離級別是:read committed 讀已提交 (注意啦!!! oracle只支援兩種隔離級別:
乙個是預設的,另乙個是serializable
)
一般來說,級別越高,執行的效率越低。像serializable這種 它是通過鎖表的形式使其他執行緒等待,等這個執行緒執行完了再去執行其他執行緒,所以它可以避免髒讀、不可重複讀、幻讀的發生。但是要結合效率和各方面因素。
如果不考慮隔離級別的話,就可能產生以下的問題:
髒讀
:指乙個事務在處理過程中讀到了另乙個事務未提交的資料。即讀到了髒資料
何為髒資料,還是舉個栗子:財務給員工發2000元工資,其中會涉及資料 員工+2000 財務-2000當財務執行完第一條 員工+2000時 就通知員工檢視工資。此時員工確實看到自己工資到賬了,但是財務突然發現該員工工資多發了100塊,所以沒有提交事務, 財務-2000 這個操作沒有執行,事務回滾。那麼員工看到自己工資+2000 就是乙個髒資料。
不可重複讀
:指在乙個事務範圍內,讀取同一條結果,得到了不同的值。這是因為在讀取的間隔,資料被另一事務修改並提交了
例如:銀行想查詢a帳戶餘額,第一次查詢a帳戶為200元,此時a向帳戶記憶體了100元並提交了,銀行接著又進行了一次查詢,此時a帳戶為300元了。銀行兩次查詢不一致,可能就會很困惑,不知道哪次查詢是準的。
不可重複讀
和髒讀的區別是:
髒讀是讀取前一事務未提交的髒資料,不可重複讀是重新讀取了前一事務已提交的資料。
幻讀
:一般是針對多筆記錄。
指同樣一筆查詢在整個事務過程中多次執行後,查詢所得的結果集是不一樣的。
例如:銀行做報表統計account表中所有使用者的總額為500元,途中插入新的一筆金額100元,這時銀行再統計發現帳戶為600元了.
幻讀和不可重複讀都是讀取了另一條已經提交的事務(這點就髒讀不同),所不同的是不可重複讀查詢的都是同乙個資料項,而幻讀針對的是一批資料整體(比如資料的個數)。 幻讀的重點在於
新增或者刪除 (資料條數變化)
查詢資料庫的隔離級別:mysql資料庫查詢當前事務隔離級別:
select @@tx_isolation
mysql資料庫設定事務隔離級別:
set transaction isolation level 隔離級別名
eg:
set transaction isolation level read committed;
記住:
設定資料庫的隔離級別一定要是在開啟事務之前!
如果感興趣 ,可以查查使用jdbc對資料庫的事務設定隔離級別,它是通過呼叫connection對settransactionisolation(level)方法。
差不多就是這些啦 ! 第一次寫這個,就當是記錄了 !有不足之處還請見諒,當然這裡參考了很多前輩們寫的東西,感謝他們的分享。每天進步一點點,加油
!
關於事務的一些基本知識
原子性 atomicity 原子 的本意是 不可再分 事務的原子性表現為乙個事務中涉及到的多個操作在邏輯上缺一不可。事務的原子性要求事務中的所有操作要麼都執行,要麼都不執行。一致性 consistency 一致 指的是資料的一致,具體是指 所有資料都處於滿足業務規則的一致性狀態。一致性原則要求 乙個...
關於Spring 的事務
首先了解什麼事事務,和一些基本概念。什麼是事務 事務 transaction 是訪問並可能更新資料庫中各種資料項的乙個程式執行單元 unit 事務的四大特性 事務的特性 acid 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 事...
關於Mongodb的事務
關於事務 事務的隔離級別 未提交讀 髒讀資料 已提交讀 不可重複讀 幻讀 序列化 serializable解決 uncommitted read 解決 unrepeat read 解決 mongodb的部署方式 單機模式 乙個primary 在記憶體中 包含 乙個databuffer 乙個journ...