MySQL鎖的粒度分為:行級鎖、表級鎖、頁級鎖。 一、行級鎖(INNODB引擎) 行級鎖是Mysql中鎖定粒度最細的一種鎖,表示只針對當前操作的行進行加鎖。 行級鎖能大大減少資料庫操作的衝突。其加鎖粒度最小,但加鎖的開銷也最大。 行級鎖分為共用鎖 和 排他鎖。 特點:開銷大,加鎖慢;會出現死鎖;鎖定 ...
MySQL鎖的粒度分為:行級鎖、表級鎖、頁級鎖。
一、行級鎖(INNODB引擎)
行級鎖是Mysql中鎖定粒度最細的一種鎖,表示只針對當前操作的行進行加鎖。
行級鎖能大大減少資料庫操作的衝突。其加鎖粒度最小,但加鎖的開銷也最大。
行級鎖分為共用鎖 和 排他鎖。
特點:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。
- Record Lock,記錄鎖,也就是僅僅把一條記錄鎖上;
- Gap Lock,間隙鎖,鎖定一個範圍,但是不包含記錄本身;
- Next-Key Lock:Record Lock + Gap Lock 的組合,鎖定一個範圍,並且鎖定記錄本身。
二、表級鎖(MYISAM引擎)
表級鎖是mysql中鎖定粒度最大的一種鎖,表示對當前操作的整張表加鎖,它實現簡單,資源消耗較少,被大部分mysql引擎支持。
表級鎖定分為表共用讀鎖(共用鎖)與表獨占寫鎖(排他鎖)。
最常使用的MyISAM與InnoDB都支持表級鎖定。
特點:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發出鎖衝突的概率最高,併發度最低。
三、頁級鎖(BDB引擎)
頁級鎖是 MySQL 中鎖定粒度介於行級鎖和表級鎖中間的一種鎖。表級鎖速度快,但衝突多,行級衝突少,但速度慢。
因此,採取了折衷的頁級鎖,一次鎖定相鄰的一組記錄。
特點:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。
MySQL鎖的級別分為:共用鎖、排他鎖、意向鎖。
一、共用鎖(行鎖)
共用鎖又稱:讀鎖、S鎖,主要為瞭解決併發讀數據的場景,讀時不允許進行寫的操作
當有事務對數據加了讀鎖後,其他事務只能對鎖定的數據加讀鎖,不能加寫鎖
加鎖方式 : select * from 表 where 條件=值 lock in share mode;
釋放方式 : commit、rollback;
二、排他鎖(行鎖)
排他鎖又稱:獨占鎖、寫鎖、X鎖,主要為了在事務進行寫操作時,不允許被其他的事務修改
當事務對數據加了寫鎖後,其他事務不能再對數據加任何類型的鎖,有寫鎖的事務既能讀,又能寫數據
加鎖方式 :自動 :增刪改查操作語句預設加鎖
手動 :select * from 表 where 條件=值 for update;釋放方式 : commit、rollback;
三、意向鎖(表鎖)
意向鎖又稱:I鎖,主要為了在一個事務中揭示下一行將要被請求鎖的類型,調高加表鎖的效率
加鎖方式:意向鎖是InnoDB自動加的,不可以手動加對於INSERT、UPDATE和DELETE,InnoDB 會自動給涉及的數據加排他鎖;
對於一般的SELECT語句,InnoDB 不會加任何鎖,事務可以通過以下語句顯式加共用鎖或排他鎖。表級讀鎖:lock table 表 read;
表級寫鎖:lock table 表 write;
本文主要簡單介紹了mysql鎖的形成及使用方法