事務隔離機制

2022-07-05 02:03:13 字數 884 閱讀 6535

五年前在論壇上有過一次提問,如下:

下面兩個問題的答案就是資料庫的事務隔離機制。資料庫針對外部的併發請求,也是要考慮資源搶占問題的,所以資料庫針對同一記錄的寫請求,也是要加鎖的!

最簡單的方式就是針對每個請求都加鎖,全部序列,這樣肯定不會有問題。但這樣效能很低,所以db將鎖分為了讀鎖和寫鎖,也就是常說的x鎖(排他鎖)和s鎖(共享鎖),對同一記錄可以同時進入多個s鎖實現併發讀。再後來,db為了進一步提高效能,採用無鎖的mvvc機制(multiversion currency control),既解決資源搶占,又支援事務同時讀寫。但效能高和事務完全隔離性無法同時滿足,db提供了4項事務隔離級別來權衡,需要使用者根據自身業務來選擇合適的隔離級別。隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。

1、髒讀:事務a讀取了事務b更新的資料,然後b回滾操作,那麼a讀取到的資料是髒資料

2、不可重複讀:事務 a 多次讀取同一資料,事務 b 在事務a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時,結果 不一致。

3、幻讀:系統管理員a將資料庫中所有學生的成績從具體分數改為abcde等級,但是系統管理員b就在這個時候插入了一條具體分數的記錄,當系統管理員a改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。

mysql預設的事務隔離級別為repeatable-read。

Oracle 事務隔離機制

事務隔離級別 乙個事務對資料庫的修改與並行的另乙個事務的隔離程度。3類資料讀問題 髒讀 不可重複讀和幻象讀 2類資料更新問題 第一類丟失更新和第二類丟失更新 1 幻想讀 事務t1讀取一條指定where條件的語句,返回結果集。此時事務t2插入一行新記錄,恰好滿足t1的where條件。然後t1使用相同的...

Mysql事務隔離機制

了解mysql事務隔離機制首先需要理解什麼是acid a 原子性automicity,乙個事務作為不可分割的最小單元,乙個事務裡面的所有操作要麼全部成功,要麼全部失敗。c 一致性consistency,事物結束後系統狀態是一致的,即 資料不能平白無故的產生,也不能平白無故的消失,例如乙個轉賬業務事務...

事務隔離與鎖機制

innodb 儲存引擎既支援行級鎖,也支援表級鎖,預設情況下使用行級鎖。所謂表級鎖,它直接鎖住的是乙個表,開銷小,加鎖快,不會出現死鎖的情況,鎖定粒度大,發生鎖衝突的概率更高,併發度最低。所謂行級鎖,它直接鎖住的是一條記錄,開銷大,加鎖慢,發生鎖衝突的概率較低,併發度很高。所謂頁級鎖,它是鎖住的乙個...