十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹了Laravel事務(wù)中使用悲觀鎖的示例,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)是一家以成都網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化排名、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都玻璃鋼雕塑等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
laravel 提供了方便快捷的數(shù)據(jù)庫事務(wù)使用方式,在使用中遇到過幾個(gè)容易混淆和被誤導(dǎo)的地方,這里做個(gè)記錄,希望哪里寫的不對的地方各位大神指點(diǎn)一下
laravel 事務(wù)分為手動(dòng)方式和自動(dòng)方式,但如果我們在使用 laravel 提供的 sharedLock 或者 lockForUpdate 鎖表的方式,為了避免不必要的麻煩和錯(cuò)誤,建議最好使用手動(dòng)提交事務(wù)來處理,如下圖:

下面來說說 sharedLock (共享鎖) 和 lockForUpdate (悲觀鎖) 這兩個(gè)在使用上的區(qū)別和影響
sharedLock (共享鎖)
sharedLock 使用時(shí)等同于 SQL 語句 *select from transaction_test where type = 1 lock in share mode;**
在事務(wù)中使用 sharedLock 時(shí)才會(huì)生效,會(huì)把數(shù)據(jù)所在行進(jìn)行鎖定,此時(shí)被鎖定的數(shù)據(jù),不允許被其他操作修改,但是被鎖定的數(shù)據(jù),對查詢操作沒有影響,無論是普通查詢還是事務(wù)中的查詢操作,都不會(huì)受到影響。被鎖定的數(shù)據(jù),知道事務(wù)被提交或者回滾之后,才會(huì)釋放.
lockForUpdate (悲觀鎖)
lockForUpdate 使用時(shí)等同于 SQL 語句 *select from transaction_test where type = 1 for update;**
lockForUpdate 只有在事務(wù)中才會(huì)生效,使用 lockForUpdate 時(shí)數(shù)據(jù)所在行被鎖定,此刻其他事務(wù)中的鎖表操作會(huì)等待當(dāng)前事務(wù)提交才會(huì)執(zhí)行,但是對于非鎖表和普通的查詢操作并沒有限制,有影響的只是你在事務(wù)中同樣執(zhí)行的鎖表操作.
總之,無論是共享鎖還是悲觀鎖,受影響的只是事務(wù)中執(zhí)行鎖表的操作,對于普通的查詢操作,和事務(wù)中的非鎖表操作沒有影響,
同時(shí)需要注意的是,無論悲觀鎖還是共享鎖當(dāng) sql 語句涉及到索引 , 并用索引作為查詢或判斷的依據(jù)時(shí),那么 MySQL 會(huì)用行級鎖鎖定所要修改的行,否則會(huì)使用表鎖鎖住整張表,因此在使用時(shí)一定要注意使用索引,否則會(huì)導(dǎo)致高的并發(fā)問題;
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Laravel事務(wù)中使用悲觀鎖的示例”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!