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

歡迎訪問 生活随笔!

生活随笔

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

数据库

一分钟深入Mysql的意向锁——《深究Mysql锁》

發布時間:2025/3/20 数据库 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一分钟深入Mysql的意向锁——《深究Mysql锁》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

延伸閱讀:

三分鐘了解Mysql的表級鎖

五分鐘了解Mysql的行級鎖

mysql鎖相關講解及其應用——《深究mysql鎖》了解鎖前,一定要先看這篇,了解什么是MVCC,如果我們學習鎖,沒有MVCC的知識,理解起來會總覺得不明朗。本來我的這個只是個記錄,并不是專門的講給別人看的,后發現有不少人看,我還是專門加上這篇文章的鏈接。

在《五分鐘了解Mysql的行級鎖》中說到,InnoDB為了讓表鎖和行鎖共存而使用了意向鎖。但是并沒有細說為什么如果沒有意 向鎖的話,表鎖和行鎖不能共存。 現在就來細說一下。

為什么沒有意向鎖的話,表鎖和行鎖不能共存?


舉個粟子(此時假設行鎖和表鎖能共存): 事務A鎖住表中的一行(寫鎖)。事務B鎖住整個表(寫鎖)。

但你就會發現一個很明顯的問題,事務A既然鎖住了某一行,其他事務就不可能修改這一行。這與”事務B鎖住整個表就能修改表中的任意一行“形成了沖突。所以,沒有意向鎖的時候,行鎖與表鎖共存就會存在問題!

意向鎖是如何讓表鎖和行鎖共存的?


有了意向鎖之后,前面例子中的事務A在申請行鎖(寫鎖)之前,數據庫會自動先給事務A申請表的意向排他鎖。當事務B去申請表的寫鎖時就會失敗,因為表上有意向排他鎖之后事務B申請表的寫鎖時會被阻塞。

所以,意向鎖的作用就是:

當一個事務在需要獲取資源的鎖定時,如果該資源已經被排他鎖占用,則數據庫會自動給該事務申請一個該表的意向鎖。如果自己需要一個共享鎖定,就申請一個意向共享鎖。如果需要的是某行(或者某些行)的排他鎖定,則申請一個意向排他鎖

?說明:意向鎖之間都是兼容的,之前是我看錯了,Im so sorry參考:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-intention-locks

意向鎖是表鎖還是行鎖?


首先可以肯定的是,意向鎖是表級別鎖。意向鎖是表鎖是有原因的。

當我們需要給一個加表鎖的時候,我們需要根據意向鎖去判斷表中有沒有數據行被鎖定,以確定是否能加成功。如果意向鎖是行鎖,那么我們就得遍歷表中所有數據行來判斷。如果意向鎖是表鎖,則我們直接判斷一次就知道表中是否有數據行被鎖定了。

總結

以上是生活随笔為你收集整理的一分钟深入Mysql的意向锁——《深究Mysql锁》的全部內容,希望文章能夠幫你解決所遇到的問題。

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