Mysql 鎖粒度
表鎖:
表鎖是mysql 中最幾本的鎖策略,並且是開銷最小的策略:它會鎖定整張表。
一個用戶在對表進行鎖操作(增,刪,改)前,首先要獲得寫鎖,這會阻塞其他用戶對該表的所有讀寫操作。只有沒有寫鎖時,其他用戶才能獲得讀鎖,讀鎖之間是不相互阻塞的。
在特定的場景中,表鎖也可能有良好的性能。例如:READ LOCAL 表鎖支持某些類型的並發寫操作。另外,寫鎖也比讀鎖有更高的優先級,因此,一個寫鎖的請求,可能會被插入到讀鎖隊列的前面(寫鎖能插入到鎖隊列的前面,反之,讀鎖不能插入到寫鎖的前面);
盡管存儲引擎可以管理自己的鎖,Mysql本身還是會使用各種有效的鎖來實現不同的目的。例如:服務器會為諸如 ALTER TABLE 之類的語句使用表鎖,而忽略存儲引擎的鎖機制。
行級鎖:
行級鎖可以最大程度的支持並發處理(同時也帶來最大鎖開銷)。眾所周知,在InnoDB 和XtraDB 以及其他一些存儲引擎中實現了行級鎖。行級鎖只在存儲引擎層實現,而Mysql服務器層沒有實現。