mysql鎖與事務總結

Echizen_1發表於2018-12-28

事務ACID屬性

  • 原子性:事務中的所有操作可以看作為原子,要麼都成功,要麼都失敗。mysql通過回滾日誌實現資料迴歸,保持原子性。事務進行中優先記錄回滾日誌,然後再運算元據。回滾日誌不能將資料庫直接還原為提交前的樣子,儲存的記錄為邏輯日誌(比如儲存一條資料,相對應有一條刪除資料)
  • 永續性:事務提交後,資料將永久儲存。mysql根據重做日誌保證資料的永續性,當事務提交時,伺服器發生當機,將根據重做日誌中事務已提交但未更新磁碟資料進行持久化。當一條資料被修改時,先把資料儲存記憶體中,並生成一條重做日誌儲存在快取中;當事務提交時,將記憶體中的資料持久化到磁碟,重做日誌也進行持久化(重做日誌具有原子性)
  • 隔離性:鎖實現,事務間互不干擾。一共有四種隔離性
  1. 未提交讀,一個事務查詢到另一個事務未提交資料(髒讀)
  2. 提交讀,一個事務中兩次查詢可能查出不同資料(不可重複讀)
  3.  可重複讀,一個事務中每次查詢到的資料集相同(幻讀)
  4. 串性化
  • 一致性

行鎖

      mysql資料引擎innoDB,支援事務,預設使用行鎖,行鎖開銷大但粒度小,併發處理能力高。當執行insert、update、delete預設加鎖,select不加鎖。

  1. 共享鎖(讀鎖 lock in share mode),支援多個查詢操作共同執行
  2. 排他鎖(寫鎖 for update),當事務未提交之前,禁止其他事務對資料進行加鎖(讀鎖、寫鎖),阻塞等待

表鎖

       MyISAM預設使用表鎖,開銷小但併發處理能力低。

當使用innoDB儲存引擎時,查詢語句條件未非索引欄位,行鎖將升級為表鎖。當進行全表檢索

、多表查詢時使用表鎖




相關文章