mysql對外提供了一種應用層級別的共享鎖,通過這個共享鎖,資料庫之上的應用程式可以實現互斥功能。這個共享鎖通過一組mysql 內建函式實現。
get_lock(str
,timeout
) 這個函式的作用是獲取共享鎖,其中str是應用程式通訊雙方協商好的乙個字串,timeout是等待該鎖的超時時間。如果能在timeout時間內獲取到鎖,則返回1;如果在timeout時間後仍然獲取不到鎖,則返回0;如果發生錯誤,則返回null。
乙個應用程式獲取到鎖後,可以通過release_lock(str
)
、執行新的get_lock(str,timeout)、或者mysql連線被釋放時(不管是正常釋放還是異常斷開)這三種方式釋放鎖。
如果有多個客戶端想去同時通過get_lock(str, timeout)獲取鎖,則他們獲取鎖的先後順序不可知。
release_lock(str
) 這個函式的作用是釋放名為str的共享鎖。如果鎖被成功釋放,返回1;如果這個程序沒有占有該鎖,則返回0;如果這個名為str的鎖不存在,則返回null。
還有兩個函式,感覺用處不是很大:
is_used_lock(str
)
檢查名為str的鎖是否在使用(被鎖),如果被鎖,則返回擁有該鎖的客戶端標識,否則返回null。
is_free_lock(str)
檢查名為str的鎖是否可用(沒有被鎖),如果可用則返回1;如果在使用則返回0;如果有錯誤則返回null。
參考:
MySQL中的共享鎖與排他鎖
在mysql中的行級鎖,表級鎖,頁級鎖中介紹過,行級鎖是mysql中鎖定粒度最細的一種鎖,行級鎖能大大減少資料庫操作的衝突。行級鎖分為共享鎖和排他鎖兩種,本文將詳細介紹共享鎖及排他鎖的概念 使用方式及注意事項等。共享鎖 share lock 共享鎖又稱讀鎖,是讀取操作建立的鎖。其他使用者可以併發讀取...
MySQL中的共享鎖與排他鎖
在mysql中的行級鎖,表級鎖,頁級鎖中介紹過,行級鎖是mysql中鎖定粒度最細的一種鎖,行級鎖能大大減少資料庫操作的衝突。行級鎖分為共享鎖和排他鎖兩種,本文將詳細介紹共享鎖及排他鎖的概念 使用方式及注意事項等。共享鎖又稱讀鎖,是讀取操作建立的鎖。其他使用者可以併發讀取資料,但任何事務都不能對資料進...
MySQL中的共享鎖與排他鎖
共享鎖又稱讀鎖,是讀取操作建立的鎖。其他使用者可以併發讀取資料,但任何事務都不能對資料進行修改 獲取資料上的排他鎖 直到已釋放所有共享鎖。如果事務t對資料a加上共享鎖後,則其他事務只能對a再加共享鎖,不能加排他鎖。獲准共享鎖的事務只能讀資料,不能修改資料。select lock in share m...