MySQL 的鎖機制一直是一個備受關注的話題,其中最常見的就是行級鎖。這篇文章將會探討 MySQL 是否真的是行級鎖。
MySQL 的鎖類型
MySQL 中的鎖可以分為共享鎖和排他鎖,共享鎖(Shared Lock)又叫讀鎖,排他鎖(Exclusive Lock)又叫寫鎖,鎖的目的是為了在多線程的情況下保證數據的一致性。
InnoDB 存儲引擎的鎖
InnoDB 存儲引擎是 MySQL 中最常用的存儲引擎,它采用的是行級鎖的方式, 也就是在對某一行數據進行修改或者讀取的時候,只會鎖定這一行的數據而不會鎖住其他的數據,這種方式也被稱為 Record Lock。
MyISAM 存儲引擎的鎖
MyISAM 存儲引擎并不支持行級鎖,他采用的是表級鎖(Table Lock),也就是在對某一行數據進行修改或者讀取的時候,這個表的所有行都會被鎖住,直到當前操作完成才會釋放鎖。
二者的比較
MyISAM 存儲引擎采用的鎖機制比較簡單,但是它的并發性相對較差,對于讀多寫少的應用場景,效率還是不錯的。而 InnoDB 存儲引擎采用的行級鎖機制,可以提高并發性,特別是在高并發的 OLTP(在線事務處理)系統中,效果更加明顯。
小結
MySQL 采用的鎖機制和存儲引擎密切相關,不同的存儲引擎有不同的鎖機制,也會對系統的性能有所影響。不過可以肯定的是,InnoDB 存儲引擎采用了行級鎖的方式,這種方式可以提高系統的并發性,對于高并發的 OLTP 系統效果非常好。