Mysql的行級鎖 -- 共享鎖和排他鎖

在已經(jīng)開啟事務的前提下:
共享鎖
A用戶使用了共享鎖徽诲,B用戶可以使用共享鎖或者不用鎖能查詢到數(shù)據(jù)毅人,但是使用排他鎖就會報錯
A更新數(shù)據(jù)铣耘,但是會一直在等待,假如1s后B也更新數(shù)據(jù)囤锉,這時就會陷入死鎖報錯退出坦弟。然后A就能更新成功了
排他鎖
A用戶使用了排他鎖,B用戶就使用排他鎖或者共享鎖來獲取數(shù)據(jù)官地,會一直等待中
A用戶更新數(shù)據(jù)并提交事務酿傍,此時B用戶用戶獲得鎖成功并查得數(shù)據(jù)


InnoDb的鎖的一些注意事項

1. 在不通過索引條件查詢的時候,InnoDB確實使用的是表鎖驱入,而不是行鎖

像我們平常通過id查詢這個就是通過索引條件查詢赤炒,因為一般來說id都會做為主鍵,主鍵會創(chuàng)建索引
如果通過user_name來查詢這個就不是通過索引條件查詢亏较,除非你給user_name加一個索引就可以

2. 由于MySQL的行鎖是針對索引加的鎖莺褒,不是針對記錄加的鎖,所以雖然是訪問不同行的記錄雪情,但是如果是使用相同的索引鍵遵岩,是會出現(xiàn)鎖沖突的。應用設計的時候要注意這一點巡通。
3. 當表有多個索引的時候旷余,不同的事務可以使用不同的索引鎖定不同的行,另外扁达,不論是使用主鍵索引、唯一索引或普通索引蠢熄,InnoDB都會使用行鎖來對數(shù)據(jù)加鎖跪解。

行鎖與表鎖的區(qū)別:

行鎖顧名思義標識該條數(shù)據(jù)被鎖,無法被獲得鎖的操作更新或者訪問
表鎖表示整個表都無法被未獲得鎖的操作更新或者訪問

更深入了解可以看這個Innodb鎖機制


以下內(nèi)容為轉載

mysql鎖機制分為表級鎖和行級鎖签孔,
行級鎖中的共享鎖(select ... lock in share mode)與排他鎖(select ...for update)進行分享交流

共享鎖又稱為讀鎖叉讥,簡稱S鎖,顧名思義饥追,共享鎖就是多個事務對于同一數(shù)據(jù)可以共享一把鎖图仓,都能訪問到數(shù)據(jù),但是只能讀不能修改但绕。

排他鎖又稱為寫鎖救崔,簡稱X鎖惶看,顧名思義,排他鎖就是不能與其他所并存六孵,如一個事務獲取了一個數(shù)據(jù)行的排他鎖纬黎,其他事務就不能再獲取該行的其他鎖,包括共享鎖和排他鎖劫窒,但是獲取排他鎖的事務是可以對數(shù)據(jù)就行讀取和修改本今。

對于共享鎖大家可能很好理解,就是多個事務只能讀數(shù)據(jù)不能改數(shù)據(jù)主巍,對于排他鎖大家的理解可能就有些差別冠息,我當初就犯了一個錯誤,以為排他鎖鎖住一行數(shù)據(jù)后孕索,其他事務就不能讀取和修改該行數(shù)據(jù)逛艰,其實不是這樣的。

排他鎖指的是一個事務在一行數(shù)據(jù)加上排他鎖后檬果,其他事務不能再在其上加其他的鎖瓮孙。mysql InnoDB引擎默認的修改數(shù)據(jù)語句,update,delete,insert都會自動給涉及到的數(shù)據(jù)加上排他鎖选脊,select語句默認不會加任何鎖類型杭抠,如果加排他鎖可以使用select ...for update語句,加共享鎖可以使用select ... lock in share mode語句恳啥。

所以加過排他鎖的數(shù)據(jù)行在其他事務種是不能修改數(shù)據(jù)的偏灿,也不能通過for update和lock in share mode鎖的方式查詢數(shù)據(jù),但可以直接通過select ...from...查詢數(shù)據(jù)钝的,因為普通查詢沒有任何鎖機制翁垂。

說了這么多,咱們來看下以下簡單的例子:

我們有如下測試數(shù)據(jù)

image

現(xiàn)在我們對id=1的數(shù)據(jù)行排他查詢硝桩,這里會使用begin開啟事務沿猜,而不會看見我關閉事務,這樣做是用來測試碗脊,因為提交事務或回滾事務就會釋放鎖啼肩。

打開一個查詢窗口

image

會查詢到一條數(shù)據(jù),現(xiàn)在打開另一個查詢窗口衙伶,對同一數(shù)據(jù)分別使用排他查和共享鎖查詢兩種方式查詢

排他查

image

共享查

image

我們看到開了排他鎖查詢和共享鎖查詢都會處于阻塞狀態(tài)祈坠,因為id=1的數(shù)據(jù)已經(jīng)被加上了排他鎖,此處阻塞是等待排他鎖釋放矢劲。

如果我們直接使用以下查詢呢

image

我們看到是可以查詢到數(shù)據(jù)的赦拘。

我們再看一下一個事務獲取了共享鎖,在其他查詢中也只能加共享鎖或不加鎖芬沉。

image
image
image

我們看到是可以查詢數(shù)據(jù)的躺同,但加排他鎖就查不到阁猜,因為排他鎖與共享鎖不能存在同一數(shù)據(jù)上。

最后我們驗證下上面說的mysql InnoDb引擎中update,delete,insert語句自動加排他鎖的問題笋籽,

image
image

此時共享查詢處于阻塞蹦漠,等待排它鎖的釋放,但是用普通查詢能查到數(shù)據(jù)车海,因為沒用上鎖機制不與排他鎖互斥笛园,但查到的數(shù)據(jù)是修改數(shù)據(jù)之前的老數(shù)據(jù)。

image

然后我們提交數(shù)據(jù)侍芝,釋放排他鎖看下修改后的數(shù)據(jù)研铆,此時可用排他查,共享查和普通查詢州叠, 因為事務提交后該行數(shù)據(jù)釋放排他鎖棵红,下面就只顯示普通查詢,其他的同學們自己去驗證咧栗。

image
image

可以看到結果與預期的一樣逆甜。

個人博客

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市致板,隨后出現(xiàn)的幾起案子交煞,更是在濱河造成了極大的恐慌,老刑警劉巖斟或,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件素征,死亡現(xiàn)場離奇詭異,居然都是意外死亡萝挤,警方通過查閱死者的電腦和手機御毅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怜珍,“玉大人端蛆,你說我怎么就攤上這事∷址海” “怎么了欺税?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長揭璃。 經(jīng)常有香客問我,道長亭罪,這世上最難降的妖魔是什么瘦馍? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮应役,結果婚禮上情组,老公的妹妹穿的比我還像新娘燥筷。我一直安慰自己,他們只是感情好院崇,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布肆氓。 她就那樣靜靜地躺著,像睡著了一般底瓣。 火紅的嫁衣襯著肌膚如雪谢揪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天捐凭,我揣著相機與錄音拨扶,去河邊找鬼。 笑死茁肠,一個胖子當著我的面吹牛患民,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垦梆,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼匹颤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了托猩?” 一聲冷哼從身側響起印蓖,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎站刑,沒想到半個月后另伍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡绞旅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年摆尝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片因悲。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡堕汞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晃琳,到底是詐尸還是另有隱情讯检,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布卫旱,位于F島的核電站人灼,受9級特大地震影響,放射性物質發(fā)生泄漏顾翼。R本人自食惡果不足惜投放,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望适贸。 院中可真熱鬧灸芳,春花似錦涝桅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谒获,卻和暖如春蛤肌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背究反。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工寻定, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人精耐。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓狼速,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卦停。 傳聞我的和親對象是個殘疾皇子向胡,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容