1. 程式人生 > >初步認識 行級鎖

初步認識 行級鎖

行級鎖是MySQL中粒度最小的一種鎖,他能大大減少資料庫操作的衝突。但是粒度越小,實現的成本也越高。MYISAM引擎只支援表級鎖,而INNODB引擎能夠支援行級鎖,下面的內容也是針對INNODB行級鎖展開的。
INNODB的行級鎖有共享鎖(S LOCK)和排他鎖(X LOCK)兩種。共享鎖允許事物讀一行記錄,不允許任何執行緒對該行記錄進行修改。排他鎖允許當前事物刪除或更新一行記錄,其他執行緒不能操作該記錄。

共享鎖:
共享鎖又稱讀鎖,是讀取操作建立的鎖。其他使用者可以併發讀取資料,但任何事務都不能對資料進行修改(獲取資料上的排他鎖),直到已釋放所有共享鎖。
如果事務T對資料A加上共享鎖後,則其他事務只能對A再加共享鎖,不能加排他鎖。獲准共享鎖的事務只能讀資料,不能修改資料。
用法
SELECT … LOCK IN SHARE MODE;
在查詢語句後面增加LOCK IN SHARE MODE,Mysql會對查詢結果中的每行都加共享鎖,當沒有其他執行緒對查詢結果集中的任何一行使用排他鎖時,可以成功申請共享鎖,否則會被阻塞。其他執行緒也可以讀取使用了共享鎖的表,而且這些執行緒讀取的是同一個版本的資料。
排他鎖:
排他鎖又稱寫鎖,如果事務T對資料A加上排他鎖後,則其他事務不能再對A加任任何型別的封鎖。獲准排他鎖的事務既能讀資料,又能修改資料。
用法
SELECT … FOR UPDATE;
在查詢語句後面增加FOR UPDATE,Mysql會對查詢結果中的每行都加排他鎖,當沒有其他執行緒對查詢結果集中的任何一行使用排他鎖時,可以成功申請排他鎖,否則會被阻塞。