mysql事務介紹及原理

1 爲什麼要事務

  事務是一組不可被分割執行的SQL語句集合,如果有必要,可以撤銷。銀行轉賬是經典的解釋事務的例子。用戶A給用戶B轉賬5000元主要步驟可以概括爲如下兩步。
  第一,賬戶A賬戶減去5000元;
  第二,賬戶B賬戶增加5000元;
  這兩步要麼成功,要麼全不成功,否則都會導致數據不一致。這就可以用到事務來保證,如果是不同銀行之間的轉賬還需要用到分佈式事務。

2 事務的性質

  事務的機制通常被概括爲“ACID”原則即原子性(A)、穩定性(C)、隔離性(I)和持久性(D)。
  原子性:構成事務的的所有操作必須是一個邏輯單元,要麼全部執行,要麼全部不執行。
  穩定性:數據庫在事務執行前後狀態都必須是穩定的。
  隔離性:事務之間不會相互影響。
  持久性:事務執行成功後必須全部寫入磁盤。

3 事務隔離性實現原理

  數據庫事務會導致髒讀、不可重複讀和幻影讀等問題。
  髒讀:事務還沒提交,他的修改已經被其他事務看到。
  不可重複讀:同一事務中兩個相同SQL讀取的內容可能不同。兩次讀取之間其他事務提交了修改可能會造成讀取數據不一致。
  幻影數據:同一個事務突然發現他以前沒發現的數據。和不可重複讀很類似,不過修改數據改成增加數據。
針對可能的問題,InnoDB提供了四種不同級別的機制保證數據隔離性。

  事務的隔離用是通過鎖機制實現的,不同於MyISAM使用表級別的鎖,InnoDB採用更細粒度的行級別鎖,提高了數據表的性能。InnoDB的鎖通過鎖定索引來實現,如果查詢條件中有主鍵則鎖定主鍵,如果有索引則先鎖定對應索引然後再鎖定對應的主鍵(可能造成死鎖),如果連索引都沒有則會鎖定整個數據表。

事務的實例(轉賬)請參考:https://www.cnblogs.com/ivanpan/p/6653990.html

                 (訂單)請參考:http://blog.csdn.net/dreamvyps/article/details/50325967

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章