Mysql 行鎖,表鎖的理解 實踐

2021-09-29 18:47:01 字數 1441 閱讀 4947

本文章sql語句中的所有的資料記錄基本上就這兩條資料。

主要是為了討論下在mysql事務查詢中,什麼時候mysql會加行鎖,什麼時候會加表鎖,自己通過乙個表的一些操作會去一一的說明。

1,mysal預設的儲存引擎是innodb,那麼innodb與myisam儲存引擎其中乙個區別就是說在innodb中支援行鎖和事務。

2,通過命令列的方式建立事物的命令是start transaction;,提交事物的命令列語句是commit;

3,在mysql中,行鎖本質上是通過索引項去新增的。

圖中標號1 處是通過sname的索引去修改表中sname='lihua』的行記錄,從圖中標號2處我們可以看出修改的語句是成功的,沒有阻塞狀態,從這裡我們可以推斷出,通過update語句進行更新表記錄(通過索引去update)是不會進行加表鎖的,同理從標號為3 的地方可以看出,事務2想要去更新sname='lihua』的記錄的時候,出現了阻塞的狀態,所以從這裡我們可以看出通過索引去update行記錄是會對對應的記錄進行加行鎖的設定。

我們也可以通過select * from innodb_trx \g語句進行檢視事務的阻塞狀態:

從上面的紅色方框中可以看出,事務2在執行第二次update操作的時候是出現了阻塞的狀態。

補充:無論是加行鎖,或者是表鎖,都不會去阻塞讀操作,因為mysql中會存在資料快照這樣一種方式去供讀操作去查詢,因此不會阻塞。

mysql行鎖的特性 MySql的表鎖行鎖及間隙鎖

常用命令 手動新增表鎖 lock table 表名稱 read write 表名稱2 read write 檢視表上加過的鎖 show open tables 刪除表鎖 unlock tables 1.表鎖 特點 1.每次操作鎖住整張表,開銷小,加鎖快 2.不會出現死鎖 3.鎖定粒度大,發生鎖衝突的...

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

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

MySQL的表鎖 行鎖

相對其他資料庫而言,mysql的鎖機制比較簡單,其最顯著的特點是不同的儲存引擎支援不同的鎖機制。mysql表級鎖有兩種模式 表共享讀鎖 table read lock 和表獨佔寫鎖 table write lock 對myisam的讀操作,不會阻塞其他使用者對同一表讀請求,但會阻塞對同一表的寫請求 ...