MySQL——事務的基本操做

在數據庫中,事務是指一組邏輯操做單元,使數據從一種狀態變換到另外一種狀態。數據庫

爲確保數據庫中數據的一致性,事務的操做應該是流暢完成的,中間不能失敗,一旦有操做失敗,那麼回滾到開始事務的狀態。
圖片描述併發

事務的特色(ACID)

  • 原子性:指事務是一個不可分割的工做單位,事務中的操做要麼都發生,要麼都不發生
  • 一致性:事務必須使數據庫從一個一致性狀態變換到另外一個一致性狀態。(數據不被破壞)
  • 隔離性:一個事務的執行不能被其餘事務干擾,一個事務內部的操做及使用的數據對併發的事務也是隔離的。每個事務都存在一個事務空間,彼此不干擾
  • 持久性:一個事務一旦被提交,它對數據庫的改變就是永久性的,接下來的其餘操做和數據庫故障不該該對其有任何影響

事務控制的語言

  • [ begin ]:開啓一個事務,開啓一個新的事務空間
  • [ commit ]:提交事務
  • [ rollback ]:回滾事務

圖片描述
每次begin開啓一個事務後,選擇commit和rollback結束本次事務。要從新begin開啓一個新的事務。spa


事務的併發問題

存在五種問題:髒讀、不可重複讀、幻讀、第一類丟失更新、第二類丟失更新
隔離級別:不一樣的隔離級別能夠處理不一樣的併發問題
默認的隔離級別爲:repreatable read
MySQL默認狀況下不會出現幻讀和第一類丟失更新
圖片描述3d

第一類丟失更新(回滾丟失)

圖片描述

第二類丟失更新(覆蓋丟失)

圖片描述

不可重複讀

圖片描述

幻讀

圖片描述

髒讀

圖片描述
MySQL使用鎖機制來解決第二類丟失更新
悲觀鎖:版本控制

select ......for update;

樂觀鎖:使用版本控制code

相關文章
相關標籤/搜索