【MySQL】 事務簡析

什麼是事務 ?

 事務是在進行數據庫操做時只存在兩種結果,成功或失敗,不存在成功了一半之說。數據庫

經典案例:

 銀行轉帳:
 帳戶A須要轉入1000元到帳戶B,經分析,須要進行的操做是帳戶A餘額-1000元,帳戶B餘額+1000元,在進行這兩個操做的時候,假設系統出現問題,此時帳戶A的餘額已經-1000元,可是帳戶B還沒有加上該1000元,此時系統恢復,帳戶A少了1000元,帳戶B並未到帳,這就出現了問題。而事務的存在能夠保證上述兩個狀況要麼成功要麼失敗。兩個操做未完成的話,那麼不會出現1000元丟失的狀況。併發


二、事務的特性 (ACID)

  • Atomicity      原子性
  • Consistency    一致性
  • Isolation       隔離性
  • Durability      持久性

a) Atomicity 原子性

原子性是指事務的最小單位,表示該操做是不可分割的,該操做中的一系列操做要麼都成功要麼都失敗,防止出現個人錢減小了你的錢卻沒加上的狀況;code

b) Consistency 一致性

一致性是指不管怎麼操做,數據總會保持一致,好比在轉帳時,轉帳前是1000元轉帳後是1000元,只是從帳戶A轉移到帳戶B,可是不會出現1000元不知去向的狀況。數據先後總和保持一致;事務

c) Isolation 隔離性

   隔離性是指事務與事務之間是相互獨立的,不存在事務交叉的狀況ci

d) Durability 持久性

   持久性指在事務中對數據的操做是永久性的,其餘任何操做不該該對其產生影響,即便數據庫發生錯誤,該數據也是進行事務以後的結果數據。it


三、併發狀況下事務可能會發生的問題

a) 髒讀

髒讀 簡單說是事務B讀取了事務A未提交的數據,例如事務A對數據x的值從10修改成了100,此時事務A並未提交,事務B也讀取到了這個數據x的值,此時讀到的數據爲髒數據;io

b) 不可重複讀

不可重複讀 簡單說是同一個事務內屢次對同一行數據進行查詢,獲得的結果倒是多個。因爲多個事務對同一數據進行操做,其中某個事務對該數據進行修改,則其餘事務再次查詢以後獲得的數據與前一次查詢存在差別,不可重複讀所以而生;數據

c) 幻讀

幻讀 事務A兩次查詢中,第二次查詢出現了第一次查詢未出現過的數據。例如,事務A第一次查詢出10條數據,此時事務B又插入了10條數據,那麼事務A再次進行查詢(在事務B插入數據以後),數據就會呈現出幻讀狀態,與以前的結果並不一致。查詢

相關文章
相關標籤/搜索