搜尋

首頁  >  問答  >  主體

Mysql乐观锁悲观锁行锁表锁是从哪几个方面来分类的?比如说表锁也可是乐观锁,也可以是悲观锁吗?

如题。Mysql乐观锁悲观锁行锁表锁是从哪几个方面来分类的?比如说表锁也可是乐观锁,也可以是悲观锁吗?

巴扎黑巴扎黑2785 天前833

全部回覆(1)我來回復

  • 迷茫

    迷茫2017-04-17 13:26:59

    加鎖對同時存取的影響體現在鎖的粒度上,可見行鎖粒度最小,並發存取最好,頁鎖粒度最大,表鎖介於2者之間。
    鎖有兩種:悲觀鎖和樂觀鎖。悲觀鎖假定其他使用者企圖存取或改變你正在存取、更改的物件的機率是很高的,因此在悲觀鎖的環境中,在你開始改變此物件之前就將該物件鎖住,並且直到你提交了所作的更改之後才釋放鎖定。悲觀的缺陷是不論是頁鎖還是行鎖,加鎖的時間可能會很長,這樣可能會長時間的限制其他用戶的訪問,也就是說悲觀鎖的並發訪問性不好。
    與悲觀鎖相反,樂觀鎖則認為其他使用者企圖改變你正在更改的物件的機率是很小的,因此樂觀鎖直到你準備提交所做的更改時才將物件鎖住,當你讀取以及改變該物件時並不加鎖。可見樂觀鎖加鎖的時間比悲觀鎖短,樂觀鎖可以用較大的鎖粒度獲得較好的並發存取效能。但是如果第二個用戶恰好在第一個用戶提交更改之前讀取了該對象,那麼當他完成了自己的更改進行提交時,資料庫就會發現該對像已經變化了,這樣,第二個用戶不得不重新讀取該物件並作出更改。這說明在樂觀鎖環境中,會增加並髮使用者讀取物件的次數。

    回覆
    0
  • 取消回覆