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鎖的形成及使用方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/546895.html
標籤:其他
