MySQL行鎖和表鎖

2021-10-22 21:48:50 字數 792 閱讀 3189

總結mysql常用引擎有myisam和innodb,而innodb是mysql預設的引擎。myisam不支援行鎖,而innodb支援行鎖和表鎖。

myisam在執行select時,會自動給所有涉及的表加讀鎖,在執行update、delete、insert前,會給所有涉及的表加寫鎖,無需使用者操作。

讀鎖:

select  math from zje where math>

60lock

inshare

mode;

寫鎖:

select math from zje where math >

60for

update;

適用表鎖不會出現死鎖,發生鎖衝突的機率高,併發量低。

mysql的表鎖表現形式:

myisam不適合作為主表的引擎,因為在進行寫操作時,其他的執行緒全被阻塞了。

mysql的行鎖載入在索引響應的行上的,如果對應的sql語句沒有適用索引的話,則會進行全盤掃瞄,無法適用行鎖,而是適用表鎖,其他事務無法對當前表進行更新或插入操作。

如果如上所示在一條select後面加上for update查詢的資料會加上一條排他鎖,其他事務可以進行讀操作,但不能進行寫操作。

當適用範圍查詢檢索資料時,如果請求了共享鎖或者排他鎖,innodb會給符合條件的已有資料記錄的索引項加鎖;對於鍵值在條件範圍內並不存在的記錄,叫做間隙innodb也會對這個"間隙"加鎖,這種鎖機制就是所謂的間隙鎖

mysql行鎖表鎖區別 mysql表鎖和行鎖區別

一 表鎖 特點 偏向myisam儲存引擎,開銷小,加鎖快 無死鎖 鎖定粒度大,發生鎖衝突的概率最高,併發度最低。我們在編輯表,或者執行修改表的事情了語句的時候,一般都會給表加上表鎖,可以避免一些不同步的事情出現,表鎖分為兩種,一種是讀鎖,一種是寫鎖。我們可以手動給表加上這兩種鎖,語句是 lock t...

mysql行鎖和表鎖

在呼叫儲存過程中,就會涉及到表鎖,行鎖這一概念 所謂區別 有索引的時候就是行鎖,沒有索引的時候就是表索。innodb 的行鎖是在有索引的情況下,沒有索引的表是鎖定全表的.表鎖演示 無索引 session1 mysql set autocommit 0 mysql select from innodb...

mysql行鎖和表鎖

在呼叫儲存過程中,就會涉及到表鎖,行鎖這一概念 所謂區別 有索引的時候就是行鎖,沒有索引的時候就是表索。innodb 的行鎖是在有索引的情況下,沒有索引的表是鎖定全表的.表鎖演示 無索引 session1 mysql set autocommit 0 mysql select from innodb...