講解事務前我們先來看一張圖:
這張圖講述了資料庫的隔離級別和預防髒讀、不可重複讀,幻讀的對應關係。
那麼mysql 預設的資料庫隔離級別是repeatable read ,這個級別下就不會出現髒讀和不可重複讀。
而oracle和sqlserver 的預設隔離級別是 read committed 。這種級別不會出現髒讀。
下面說下髒讀、不可重複讀、幻讀出現的場景。
1、髒讀:
前提資料庫的隔離級別為read uncommitted 讀未提交。
初始金額1000,事務a,更改了金額 500,但並沒有提交到資料庫。這時事務b過來查到了500。那麼這就是髒讀,讀到了別人未提交事務的資料。
2、不可重複讀
將資料庫的隔離級別設定為read committed,在同乙個事務中兩次查詢的結果不一致。
例如:a,b 各有500塊。此時事務1,操作a向b 轉500塊,同時事務2檢視b有500塊,在事務1提交之後,事務2再一次檢視,b**變為1000.那麼
這種情況就是不可重複讀。
3、幻讀:
前提將隔離級別提公升到repeatable read ,可以避免髒讀和不可重複讀。
同樣a提交事務,b去讀資料,發現依舊是原來的錢,只能結束當前的事務,再開乙個新事務才能讀到變化的資料。
4、seriizable隔離級別不常用
如果我們設定了seriizable序列化,就相當於鎖表,某一時間內只允許乙個事務訪問該錶。
學習事務筆記
事務 transaction 其實指的一組操作,裡面包含許多個單一的邏輯。只要有乙個邏輯沒有執行成功,那麼都算失敗。所有的資料都回歸到最初的狀態 回滾 為什麼要有事務?為了確保邏輯的成功。例子 銀行的轉賬。指的是 事務中包含的邏輯,不可分割。指的是 事務執行前後。資料完整性 指的是 事務在執行期間不...
學習筆記1 事務
一 事務的四大特性 1.原子性 atomicity 事務中所有操作是不可再分割的原子單位,事務中所有的操作要麼全部執行,要麼全部執行失敗。2.一致性 consistency 事務執行後,資料庫狀態與其他業務規則保持一致。eg 轉賬業務,無論事務執行成功與否,參與轉賬的雙方餘額之和應該是不變的。3.隔...
事務(Transaction)學習筆記
基於原部落格而寫的筆記。是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元...