MySQL中的共享鎖是用于實現讀鎖的鎖機制之一。在使用共享鎖時,會有許多讀操作對同一個數據進行操作,因此需要一個機制來維護對該數據的并發訪問。在mysql里,共享鎖什么時候釋放呢?
/*實現上鎖操作*/ LOCK TABLES table_name READ; /*查詢數據操作*/ SELECT * FROM table_name WHERE ID=1; /*解鎖操作*/ UNLOCK TABLES;
MySQL的共享鎖采用了兩段式的模式來實現。第一段是獲取互斥鎖,防止兩個事務同時請求表上的相互排斥的行級鎖,由于多個讀共享一把鎖,所以這里的互斥鎖只保護行級鎖的獲取。
第二段則向表中的所有待查詢的數據行上申請共享鎖,這里可以多個而不是一個,此時一次性將所有需要查詢的行的共享鎖全部申請上。這時在該數據中所有需要使用共享鎖的部分都是共享鎖的持有者。
那么,在MySQL中,共享鎖是什么時候釋放的呢?因為許多讀操作請求同一個數據,這個數據只有所有操作釋放后才能進行修改,所以要等到所有讀操作完畢后才能釋放鎖。這時,鎖將會被釋放并恢復到初始未鎖定的狀態。