問題:請講下在mysql中的鎖mysql
分析:該問題主要考察對中鎖的掌握,主要考察的是讀、寫鎖、行鎖、間隙鎖、next-key,其餘還有表鎖、意向鎖sql
回答要點:線程
主要從如下幾點去考慮,索引
一、mysql中的鎖有哪些?事務
二、每種鎖的使用場景?innodb
mysql種的鎖主要有讀寫鎖、行鎖、間隙鎖、next-keydate
讀鎖select
讀鎖,又叫共享鎖,簡稱S鎖,用在讀操做上,事務A對數據加上了S鎖,那麼事務A只能進行讀操做,其餘事務包括A不能再對數據加X鎖,可是能夠加S鎖;next
例,select ... in share mode數據
寫鎖
寫鎖,又叫排他鎖,簡稱X鎖,用在寫操做上,事務A對數據加了X鎖,那麼事務A能夠對數據進行讀取和更新操做,其餘線程不能對數據加S鎖或X鎖,也就是說X鎖是排他的,這裏的排他是其餘的任何鎖;
例,select .... for update
行鎖
在mysql中讀寫鎖都是行鎖,通俗點講就是鎖住的是數據行,這點區別於myIsam的表鎖,鎖住整個表。innodb下的行鎖是經過鎖住索引上的索引項來實現的,若是沒有索引則鎖住每行隱藏的ID
間隙鎖
間隙鎖,顧名思義,就是鎖住的一個範圍,間隙鎖也是行鎖的一種,因此鎖定的也是索引項中間的間隙;
next-key鎖
next-key就是行鎖+間隙鎖,也就是鎖住記錄和它前面的間隙,例,select * from t where id<=7 id的值有1 2 7則(2,7]這就是一個next-key
mysql這種行鎖的特色意味着若是查詢條件中不走索引,那麼innodb將對全部的記錄加鎖,實際效果跟鎖表是同樣的(不是表鎖)
讀寫鎖主要用在事務的隔離級別上,經過設置讀寫鎖能夠實現數據的隔離;
next-key則是用在隔離級別爲可重複讀下,用來解決幻讀;