MySQL中的共享鎖

2021-09-06 16:36:36 字數 795 閱讀 4926

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...