1 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
這個(gè)鎖是應(yīng)用程序級(jí)別的,在不同的mysql會(huì)話(huà)之間使用。它只是個(gè)名字鎖,跟你理解的表啊行啊字段啊都沒(méi)有直接關(guān)系,具體是鎖什么完全交給應(yīng)用程序。它是一種獨(dú)占鎖,意味著哪個(gè)會(huì)話(huà)持有這個(gè)鎖,其他會(huì)話(huà)嘗試拿這個(gè)鎖的時(shí)候都會(huì)失敗。
比如你想鎖一行記錄record A,那么當(dāng)前會(huì)話(huà)里你建一個(gè)鎖get_lock("record A", 10)
。此時(shí)其他所有會(huì)話(huà)依然可以隨便訪問(wèn)和修改record A,除非他們顯式的也調(diào)用get_lock("record A", 10)
。
也就是說(shuō)完全是你的應(yīng)用程序來(lái)決定檢不檢查鎖。你如果想鎖,就讓所有會(huì)話(huà)在訪問(wèn)record A的時(shí)候都顯式的調(diào)用get_lock("record A", 10)
,那明顯只有一個(gè)會(huì)話(huà)能成功。其他會(huì)話(huà)只有等超時(shí)或者持有鎖的會(huì)話(huà)調(diào)用release_lock
后才能重新拿到鎖
同理,你想鎖一個(gè)字段column A,那跟上面一樣建一個(gè)鎖get_lock("column A", 10)
。總之,拿不拿鎖是應(yīng)用程序來(lái)決定的,數(shù)據(jù)庫(kù)只是提供這個(gè)機(jī)制??创蠹沂欠駬屚话焰i,也是純粹看第一個(gè)參數(shù)鎖名字這個(gè)字符串一樣不一樣,所以最佳實(shí)踐是在鎖名字前面加上表名和數(shù)據(jù)庫(kù)名,以免誤傷
添加回答
舉報(bào)