1、資料庫的事務四大特性
資料庫事務(transaction)是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。一方面,當多個應用程式併發訪問資料庫時,事務可以在應用程式間提供乙個隔離方法,防止互相干擾。另一方面,事務為資料庫操作序列提供了乙個從失敗恢復正常的方法
⑴ 原子性(atomicity)
事務的原子性是指事務中的操作不可拆分,只允許全部執行或者全部不執行。
理解:要麼全部成功,要麼全部失敗。
⑵ 一致性(consistency)
事務的一致性是指事務的執行不能破壞資料庫的一致性,一致性也稱為完整性。乙個事務在執行後,資料庫必須從乙個一致性狀態轉變為另乙個一致性狀態。
理解:執行操作前後,資料的總量保持一致。
⑶ 隔離性(isolation)
事務的隔離型是指併發的事務相互隔離,不能互相干擾。
理解:事務之間相互隔離,互不干擾。
⑷ 永續性(durability)
事務的永續性是指事務一旦提交,對資料的狀態變更應該被永久儲存。
理解:事務提交對資料持久化。
2、事務的隔離級別
√: 可能出現 ×: 不會出現
髒讀 不可重複讀 幻讀
read uncommitted 讀未提交 √ √ √
read committed 讀提交 × √ √
repeatable read 可重複讀 × × √
serializable 序列化讀 × × ×
依此論述:
1、讀未提交
理解:a事務可以讀到b事務未提交的資料。
例子:公司發工資了,領導把5000元打到singo的賬號上,但是該事務並未提交,而singo正好去檢視賬戶,發現工資已經到賬,是5000元整,非常高 興。可是不幸的是,領導發現發給singo的工資金額不對,是2000元,於是迅速回滾了事務,修改金額後,將事務提交,最後singo實際的工資只有 2000元,singo空歡喜一場。
出現上述情況,即我們所說的髒讀 ,兩個併發的事務,「事務a:領導給singo發工資」、「事務b:singo查詢工資賬戶」,事務b讀取了事務a尚未提交的資料。
當隔離級別設定為read uncommitted 時,就可能出現髒讀,如何避免髒讀,請看下乙個隔離級別
2、讀提交
理解: a事務只能讀到b事務提交後的資料。允許其他事務對a事務查詢到的資料進行更新。
該隔離級別避免了髒讀,但是卻可能出現不可重複讀。事務a事先讀取了資料,事務b緊接了更新了資料,並提交了事務,而事務a再次讀取該資料時,資料已經發生了改變。
3、可重複讀
理解:a事務資料讀取到一條資料時,不允許其他事務對這條資料做寫操作,只能檢視。
讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。
避免了不可重複讀取和髒讀,但是有時可能出現幻讀。這可以通過「共享讀鎖」和「排他寫鎖」實現。
就是說,可重複讀避免a事務中的資料,被b事務修改。但是b事務可以在表中新增資料、刪除非a事務中的資料。
如果新增滿足a事務條件的資料,a事務再次查詢會發現資料增多,好似產生幻覺,造成幻讀。
4、序列化讀
理解:事務只能序列執行。
提供嚴格的事務隔離。它要求事務序列化執行,事務只能乙個接著乙個地執行,但不能併發執行。
序列化是最高的事務隔離級別,同時代價也花費最高,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻像讀。
大多數資料庫的預設級別就是read committed,比如sql server , oracle。
mysql的預設隔離級別就是repeatable read。
資料庫 Mysql事務詳解
mysql事務 mysql的事務預設是自動提交的,也就是你提交乙個query,他就直接執行!我們可以通過 set autocommit 0 禁止自動提交 set autocommit 1 開啟自動提交 mysql事務 include include include include include d...
資料庫事務詳解
事務 transaction 是由一系列對系統中資料進行訪問與更新的操作所組成的乙個程式執行邏輯單元。1.原子性 atomicity 事務的原子性是指事務必須是乙個原子的操作序列單元。事務中包含的各項操作在一次執行過程中,只允許出現兩種狀態之一。全部執行成功 全部執行失敗 任何一項操作都會導致整個事...
資料庫事務詳解
事務 transaction 是在同乙個處理單元中,由一系列對資料進行訪問與更新的操作所組成的乙個基本程式執行邏輯單元。資料庫事務其實主要做了以下兩方面的事 事務具有4個基本特徵,分別是 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 duration...