對比MyISAM與InnoDB關於鎖方面的區別

2021-10-06 08:44:14 字數 1165 閱讀 9763

myisam表

由於myisam無事務,所以我們想測試鎖,需要執行大資料量語句。

開啟多個查詢視窗(每個視窗代表乙個session,後用s1、s2代表兩個視窗)

讀鎖(共享鎖)

用s1,查詢乙個myisam表前200w條資料,同時s2更新第200001條,s2進入阻塞,等待s1查詢執行完,s2才能執行

用s1,查詢乙個myisam表前200w條資料,同時s2查詢第200001條,s2直接執行

這種情況是s1上共享鎖,myisam上讀鎖(共享鎖),s2能上共享鎖,不能上排他鎖

寫鎖(排他鎖)

用s1,更新乙個myisam表前200w條資料,同時s2更新第200001條,s2進入阻塞,等待s1查詢執行完,s2才能執行

同時s2查詢第200001條,第二個視窗會進入阻塞,等待s1查詢執行完,s2才能執行

這種情況是s1上排他鎖,myisam上寫鎖(排他鎖),s2無法上共享鎖、排他鎖

innodb

讀鎖(共享鎖)

用s1,開啟事務,查詢乙個innodb表第3條資料,同時s2更新第3條,s2進入阻塞,等待s1進行commit提交事務,s2才能執行成功

用s1,查詢乙個innodb表第3條資料,同時s2更新第4條,s2直接執行成功

這裡說明innodb行級鎖,共享鎖是針對行進行上鎖的

***查詢語句 lock in share mode;通過這種方式給sql語句加共享鎖

以上我們測試都是通過id來選中資料庫記錄,進行測試innodb表的行級鎖,我們的id是這張表的主鍵(聚簇索引),如果我們對非索引字段查詢,上共享鎖,那麼會上表鎖,而非行級鎖

適合場景

myisam

innodb

資料庫鎖的分類

Innodb與Myisam引擎的對比

1.區別 1 事務處理 myisam是非事務安全型的,而innodb是事務安全型的 支援事務處理等高階處理 2 鎖機制不同 myisam是表級鎖,而innodb是行級鎖 3 select update insert delete 操作 myisam 如果執行大量的select,myisam是更好的選...

InnoDB與MyISAM等儲存引擎對比

文章原文 blog.ouyangsihai.cn innodb與myisam等儲存引擎對比 innodb引擎是mysql的預設的儲存引擎,他有很多自己的特性,下面一一枚舉。行鎖設計,支援外來鍵,非鎖定讀。支援多版本的併發控制 mvcc 來獲得高併發性。提供了插入緩衝 二次寫 自適應雜湊索引 預讀等高...

MyISAM與InnoDB索引實現對比詳解

myisam索引實現 這裡設表一共有三列,假設我們以col1為主鍵,則上圖是乙個myisam表的主索引 primary key 示意。可以看出myisam的索引檔案僅僅儲存資料記錄的位址。在myisam中,主索引和輔助索引 secondary key 在結構上沒有任何區別,只是主索引要求key是唯一...