MySQL中四種鎖的介紹
MySQL是目前很多企業級應用的首選數據庫之一,鎖是數據庫中一個重要的概念。在MySQL中,鎖可以分為四種:共享鎖(S鎖)、排他鎖(X鎖)、意向共享鎖(IS鎖)和意向排他鎖(IX鎖)。
共享鎖(S鎖)
共享鎖又稱為讀鎖,在對某個數據行/表進行查詢或讀取時,MySQL需要先獲得該行/表的共享鎖。共享鎖可以同時被多個事務同時加上,不會阻塞其他事務讀取該行/表的數據。但當該數據行/表上存在排他鎖時,共享鎖就無法獲得。
排他鎖(X鎖)
排他鎖又稱為寫鎖,在對某個數據行/表進行更新或刪除操作時,MySQL需要先獲得該行/表的排他鎖。排它鎖只能被一個事務加上,意味著其他事務都不能同時修改該行/表的數據。當該數據行/表上存在共享鎖時,排他鎖也無法獲得。
意向共享鎖(IS鎖)
意向共享鎖是一種表級別的鎖,當一個事務請求獲取某個數據行/表的共享鎖時,MySQL需要先獲得該表的意向共享鎖。IS鎖并不會阻塞其他事務訪問該表,只是向其他事務表明當前事務要獲取該表的共享鎖。
意向排他鎖(IX鎖)
意向排他鎖同樣是一種表級別的鎖,當一個事務請求獲取某個數據行/表的排他鎖時,MySQL需要先獲得該表的意向排他鎖。IX鎖也不會阻塞其他事務訪問該表,只是向其他事務表明當前事務要獲取該表的排他鎖。
當一個事務請求的鎖與其他事務已經持有的鎖相沖突時,MySQL會按照一定的順序進行處理,保證事務的順序執行。