MySQL 併發處理

licheng發表於2018-03-23
  • 併發處理
    • 當多個連線對記錄進行修改時保證資料的一致性和完整性

  • 為什麼要用到併發控制

    • 假設我們的資料庫中存在著商品的記錄,現在有兩個使用者進行登陸,假設一個使用者要刪除id為22的記錄,一個使用者要讀取id為22的記錄,那麼會發生什麼樣的結果呢,結果可能是正在讀取資訊的使用者報錯而退出,也可能是他會得到一條和實際資訊不符的資訊。所以這個時候我們就需要用到併發控制了

  • 怎麼 處理併發問題
    • 在處理併發讀和併發寫的時候,系統會使用一套鎖系統來解決這個問題

  • 什麼是鎖系統
    • 鎖系統由兩類鎖來組成
      • 共享鎖(讀鎖)
        讀鎖是共享的互不阻塞的,在同一段時間內,多個使用者可以讀取同一個資源,讀取過程中資料不會發生任何變化
      • 排它鎖(寫鎖)
        寫鎖是排他的,在任何時候都只能有一個使用者寫入資源,當進行寫鎖時會阻塞其它的讀鎖或者寫鎖操作

  • 鎖的粒度

    • 鎖的粒度就是mysql鎖定時的單位,根據單位可以分為兩種

      • 表鎖,是一種開銷最小的鎖策略。使使用者得到資料表的寫鎖(禁止其他使用者進行讀寫,只有一個鎖,鎖定了整張表)
        當鎖為表鎖時,一個使用者訪問了一張表,那麼其它使用者都不能訪問這張表

      • 行鎖,是一種開銷最大的鎖策略。使使用者得到特定行的寫鎖,並行性最大(有多少條記錄,就可能對多少條記錄進行了行鎖)
        當鎖為行鎖時,使用者訪問資料表的特定行,比如第一行,那麼第一行就不能被其它使用者訪問,其它使用者只能訪問除了第一行以外的行

相關文章