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是唯一...