日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql中的乐观锁_MySQL中悲观锁和乐观锁到底是什么?

發布時間:2023/12/19 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql中的乐观锁_MySQL中悲观锁和乐观锁到底是什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

索引和鎖是數據庫中的兩個核心知識點,隔離級別的實現都是通過鎖來完成的

按照鎖顆粒對鎖進行劃分 ?

鎖用來對數據進行鎖定,我們可以從鎖定對象的粒度大小來對鎖進行劃分,分別為行鎖、頁鎖和表鎖。行鎖就是按照行的粒度對數據進行鎖定。鎖定力度小,發生鎖沖突概率低,可以實現的并發度高,但是對于鎖的開銷比較大,加鎖會比較慢,容易出現死鎖情況。

頁鎖就是在頁的粒度上進行鎖定,鎖定的數據資源比行鎖要多,因為一個頁中可以有多個行記錄。當我們使用頁鎖的時候,會出現數據浪費的現象,但這樣的浪費最多也就是一個頁上的數據行。頁鎖的開銷介于表鎖和行鎖之間,會出現死鎖。鎖定粒度介于表鎖和行鎖之間,并發度一般。

表鎖就是對數據表進行鎖定,鎖定粒度很大,同時發生鎖沖突的概率也會較高,數據訪問的并發度低。不過好處在于對鎖的使用開銷小,加鎖會很快。

還有區鎖和數據庫鎖.

每個層級的鎖數量是有限制的,因為鎖會占用內存空間,鎖空間的大小是有限的。當某個層級的鎖數量超過了這個層級的閾值時,就會進行鎖升級。鎖升級就是用更大粒度的鎖替代多個更小粒度的鎖,比如 InnoDB 中行鎖升級為表鎖,這樣做的好處是占用的鎖空間降低了,但同時數據的并發度也下降了。

從數據庫管理的角度對鎖進行劃分

共享鎖和排它鎖共享鎖也叫讀鎖或 S 鎖,共享鎖鎖定的資源可以被其他用戶讀取,但不能修改。在進行SELECT的時候,會將對象進行共享鎖鎖定,當數據讀取完畢之后,就會釋放共享鎖,這樣就可以保證數據在讀取時不被修改。排它鎖也叫獨占鎖、寫鎖或 X 鎖。排它鎖鎖定的數據只允許進行鎖定操作的事務使用,其他事務無法對已鎖定的數據進行查詢或修改。

當我們對數據進行更新的時候,也就是INSERT、DELETE或者UPDATE的時候,數據庫也會自動使用排它鎖,防止其他事務對該數據行進行操作。

意向鎖(Intent Lock),簡單來說就是給更大一級別的空間示意里面是否已經上過鎖。

從程序員的角度對鎖進行劃分

樂觀鎖

樂觀鎖(Optimistic Locking)認為對同一數據的并發操作不會總發生,屬于小概率事件,不用每次都對數據上鎖,也就是不采用數據庫自身的鎖機制,而是通過程序來實現。在程序上,我們可以采用版本號機制或者時間戳機制實現。樂觀鎖的版本號機制

在表中設計一個版本字段 version,第一次讀的時候,會獲取 version 字段的取值。然后對數據進行更新或刪除操作時,會執行UPDATE ... SET version=version+1 WHERE version=version。此時如果已經有事務對這條數據進行了更改,修改就不會成功。樂觀鎖的時間戳機制

時間戳和版本號機制一樣,也是在更新提交的時候,將當前數據的時間戳和更新之前取得的時間戳進行比較,如果兩者一致則更新成功,否則就是版本沖突。

悲觀鎖

悲觀鎖(Pessimistic Locking)也是一種思想,對數據被其他事務的修改持保守態度,會通過數據庫自身的鎖機制來實現,從而保證數據操作的排它性。

適用場景樂觀鎖適合讀操作多的場景,相對來說寫的操作比較少。它的優點在于程序實現,不存在死鎖問題,不過適用場景也會相對樂觀,因為它阻止不了除了程序以外的數據庫操作。

悲觀鎖適合寫操作多的場景,因為寫的操作具有排它性。采用悲觀鎖的方式,可以在數據庫層面阻止其他事務對該數據的操作權限,防止讀 - 寫和寫 - 寫的沖突。

總結

樂觀鎖和悲觀鎖并不是鎖,而是鎖的設計思想。

避免死鎖的發生:如果事務涉及多個表,操作比較復雜,那么可以盡量一次鎖定所有的資源,而不是逐步來獲取,這樣可以減少死鎖發生的概率;

如果事務需要更新數據表中的大部分數據,數據表又比較大,這時可以采用鎖升級的方式,比如將行級鎖升級為表級鎖,從而減少死鎖產生的概率;

不同事務并發讀寫多張數據表,可以約定訪問表的順序,采用相同的順序降低死鎖發生的概率首發公眾號:碼農架構

總結

以上是生活随笔為你收集整理的mysql中的乐观锁_MySQL中悲观锁和乐观锁到底是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。