java面試一日一題:講下mysql中的鎖

問題:請講下在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則是用在隔離級別爲可重複讀下,用來解決幻讀;

相關文章
相關標籤/搜索