MySQL的表鎖涯曲、行鎖和間隙鎖

基本命令

查看那張表被鎖住烈掠,其中In_use字段大于0則表被鎖括蝠。

show open tables;

給某張表上鎖

lock table 【表名】【read/write】;

釋放所有的鎖

unlock tables;

查看引擎

show engines;

查看自動(dòng)提交狀態(tài)

show variables like 'autocommit';

表鎖

以下是在MyISAM引擎下斑胜,MyISAM偏讀控淡。

準(zhǔn)備

  • t_logs 表一張。
  • session1 給t_logs上讀鎖或?qū)戞i止潘。
  • session2 不做任何與鎖有關(guān)操作掺炭。

讀鎖

讀鎖也叫共享鎖。

Session1 Session2
可以查詢 t_logs 表 可以查詢 t_logs 表
不可以更新 t_logs 表 不可以更新 t_logs 表
會阻塞覆山,必須等待鎖釋放
不可以查詢別的表 可以查詢別的表
不可以更新別的表 可以更新別的表

總結(jié):當(dāng)前會話為某張表加了讀鎖竹伸,當(dāng)前會話僅僅能讀取加鎖的表,任何其它操作都不能做簇宽。而其他會話對此表只有讀的權(quán)限勋篓,但除此之外的表,則正常操作魏割。

寫鎖

寫鎖也叫排它鎖譬嚣。

Session1 Session2
可以查詢 t_logs 表 不可以查詢 t_logs 表
會阻塞
可以更新 t_logs 表 不可以更新 t_logs 表
會阻塞,必須等待鎖釋放
不可以查詢別的表 可以查詢別的表
不可以更新別的表 可以更新別的表

總結(jié):當(dāng)前會話為某張表加了寫鎖钞它,那么當(dāng)前會話就獨(dú)享了這張表拜银,擁有這張表的讀寫權(quán)限殊鞭,且不能夠?qū)Τ吮碇獾娜魏伪碜鋈魏尾僮鳌F渌鼤捯膊豢梢詫Υ吮磉M(jìn)行任何操作尼桶。

行鎖

行鎖演示是在InnoDB引擎下操灿,該引擎支持事務(wù),并且為了并發(fā)性能引進(jìn)了行級鎖泵督。上行鎖的方式有兩種:

  1. select * from t_logs where id = 1 for update 其中增刪改操作自動(dòng)上行鎖趾盐,相當(dāng)于上了寫鎖(排它鎖)。
  2. select * from t_logs where id = 1 lock in share mode 相當(dāng)于上了讀鎖(共享鎖)小腊。

準(zhǔn)備說明

為了演示效果救鲤,先關(guān)閉自動(dòng)提交功能或者也可以手動(dòng)開啟事務(wù)。

set autocommit = 0 或者 begin

步驟

  1. 開啟session1
  2. set autocommit = 0
  3. update t_logs set name = 'lisi' where id = '1';
  4. 開啟session2
  5. set autocommit = 0
  6. 讀取秩冈、修改 id = 1 的這條記錄

結(jié)論

在Session1執(zhí)行 commit 命令之前本缠,假設(shè)修改 id = 1 的這一行,得出如下結(jié)論:

Session1 Session2
能夠修改id為1的這一行 除了id為1的這一行都可以修改
也能夠修改別的記錄
但修改哪條記錄入问,那條記錄就被鎖住
除了被鎖住的記錄不能修改以外(可以讀)丹锹,其它都可以修改

總結(jié):行級鎖顧名思義就是鎖定數(shù)據(jù)庫中的一行或者符合where條件的某些行,對于數(shù)據(jù)庫來說開銷比鎖一張表大队他,但是發(fā)生鎖沖突的概率比表鎖小很多卷仑,并發(fā)性能高很多,當(dāng)前會話鎖住這一行后麸折,其它會話要想修改這一行锡凝,必須等待上一個(gè)會話進(jìn)行事務(wù)的提交,否則就會阻塞在這里垢啼。但對于其它未被鎖住的行窜锯,是不受任何影響的。

間隙鎖

什么時(shí)候會發(fā)生間隙鎖芭析?看下面例子:

mysql> select * from t_permission;
+----+----------------+-------------+
| id | url            | description |
+----+----------------+-------------+
|  1 | /user/create   | create      |
|  3 | /user/update   | update      |
|  4 | /user/retrieve | retrieve    |
|  5 | /user/delete   | delete      |
+----+----------------+-------------+

t_permission 表 id 為主鍵锚扎,但缺少了 id = 2,當(dāng)我們使用范圍更新數(shù)據(jù)的時(shí)候馁启,如下語句:

update t_permission set description = '666' where id > 0 and id < 6;

將 id = 2 包括了進(jìn)去焰望,那么mysql默認(rèn)的會將這個(gè)范圍之內(nèi)所有的連續(xù)id都上鎖买决,與此同時(shí)最欠,在另一個(gè)會話中進(jìn)行插入 id = 2 的數(shù)據(jù)操作:

insert into t_permission values(1,'222','222');

那么這個(gè)插入操作會阻塞荚斯,這就是間隙鎖。如果線上環(huán)境發(fā)生了這樣的鎖等待霉颠,很不好發(fā)覺对碌,可以用show profile命令來排查。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒿偎,一起剝皮案震驚了整個(gè)濱河市朽们,隨后出現(xiàn)的幾起案子怀读,更是在濱河造成了極大的恐慌,老刑警劉巖骑脱,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菜枷,死亡現(xiàn)場離奇詭異,居然都是意外死亡惜姐,警方通過查閱死者的電腦和手機(jī)犁跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門椿息,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歹袁,“玉大人,你說我怎么就攤上這事寝优√跆颍” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵乏矾,是天一觀的道長孟抗。 經(jīng)常有香客問我,道長钻心,這世上最難降的妖魔是什么凄硼? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮捷沸,結(jié)果婚禮上摊沉,老公的妹妹穿的比我還像新娘。我一直安慰自己痒给,他們只是感情好说墨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苍柏,像睡著了一般尼斧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上试吁,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天棺棵,我揣著相機(jī)與錄音,去河邊找鬼熄捍。 笑死烛恤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的治唤。 我是一名探鬼主播棒动,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宾添!你這毒婦竟也來了船惨?” 一聲冷哼從身側(cè)響起柜裸,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粱锐,沒想到半個(gè)月后疙挺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怜浅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年铐然,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恶座。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搀暑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跨琳,到底是詐尸還是另有隱情自点,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布脉让,位于F島的核電站桂敛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溅潜。R本人自食惡果不足惜术唬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滚澜。 院中可真熱鬧粗仓,春花似錦、人聲如沸博秫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挡育。三九已至巴碗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間即寒,已是汗流浹背橡淆。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留母赵,地道東北人逸爵。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像凹嘲,于是被迫代替她去往敵國和親师倔。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351