事務的隔離級別具體是啥就不說了。隔離級別感覺是一次次的迭代的過程。為什麼這麼說:
- 因為出現了uncommit read中的事務未提交可見。
- commit read解決了此問題,同時又有新的問題產生。
2查詢到的為 1, 而6查詢到為空
- 由於b事務提交完後,2和6查詢的結果不相同,不能保證事務的一致性。
-這個可以通過版本控制的快照讀解決,在rr級別下對於快照讀總是讀取事務開始是的資料版本,這也是repeatable read解決內容。
但是這個只能解決快照讀的所帶來的問題,並不能解決如下的問題:
資料庫a有資料1,2,3
在orcal下:
2中查詢到結果為1,2,由於加了鎖(lock in share mode共享鎖或者 for update排他鎖均可),導致select讀取的並非是快照讀,而是讀取的當前值。
那麼mysql是怎麼解決rr級別下的此問題
鎖的演算法
record lock , gap lock, next-key lock
簡單來說就是對資料庫id為(-∞, 3)的資料進行了鎖定。
innnodb的rr事務隔離與orcal以及其他的是有區別的,innodb採用了next-key lock防止了圖中第4步的進行。
事物的acid:
通過redo log(重做日誌)保證事務的原子性(a)以及永續性(d);
通過undo log保證事務的一致性(c);
通過鎖以及事務隔離級別保證事務的隔離性(i);
undo並不是redo的逆操作;
redo恢復提交事務修改的頁操作 物理日誌;
undo回滾行記錄到特定版本 邏輯日誌;
資料庫事務的特性的理解
事務是使用者定義的乙個資料操作序列,是乙個完整的工作單元,要麼全部執行,要麼全部不執行。事務具有四大特性 原子性 隔離性 一致性 永續性 事務所包含的所有操作,要麼全部執行,要麼全部回滾不執行。事務的一致性是指事務的執行不能破壞資料庫資料的完整性和一致性,乙個事務在執行之前和執行之後,資料庫都必須處...
oracle 對資料庫事務的理解
事務控制命令只與dml命令 insert update delete配合使用,比如我們不會在建立表之後使用commit語句,因為當表被建立後,它會自動被提交給資料庫。也不能使用rollback語句來恢復被撤銷的表。此外,還有其他類似的語句,也不能被撤銷,例如truncate語句。所以,在執行新的命令...
理解資料庫中的事務
什麼是事務?我們知道,資料庫是乙個面向多使用者的共享機制,因此資料庫管理系統應當具備併發控制和封鎖機制,保證資料庫系統的正常執行。但是當多個使用者訪問資料庫的時候,如果每乙個使用者程式乙個乙個的序列執行,則每一時刻只有乙個使用者執行對資料庫的操作,其他使用者必須等待,這樣的話會嚴重影響資料庫資源的使...