我做了一些研究,但仍然无法理解sharedLock(在共享模式下锁定)和lockForUpdate(FOR UPDATE)之间有什么区别顺便说一句,我确认数据库是innodb 解决方案这项工作终于完成了,但仍然不知道sharedLock(共享模式下的锁定)和lockForUpdate(FOR UPDATE)有什么区别 public function index() { return dd(\DB::transaction(function() { if (\Auth::guard('user')->check()) { $model = \App\Models\User::lockForUpdate()->find(1); sleep(30); $model->point = 100000; $model->save(); } else { $model = \App\Models\User::lockForUpdate()->find(1); $model->point = $model->point + 1; $model->save(); } return $model; })); }i'm trying to figure out how to use/test the lockforupdate correctly, but i found is not function like what i expectedthis is just testingpublic function index() { return dd(\DB::transaction(function() { if (\Auth::guard('user')->check()) { $model = \App\Models\User::find(1)->lockForUpdate(); sleep(60); $model->point = 100000; $model->save(); } else { $model = \App\Models\User::find(1); $model->point = 999; $model->save(); } return $model; }));}i try to test in 2 browser, browser 1 user logged in and browser 2 not logged in, browser 1 hit refresh, then there will lockforupdate and sleep 60 seconds before updatein the 60 seconds, i go browser 2 and hit refresh, however the record is not locked, i check phpmyadmin and the record is updated(within the 60 seconds lock trigger by browser 1)but after 60 seconds, the record has been modified again by browser 1(Point 100000)so am i misunderstanding the lockforupdate is use for?or i test it incorrectly?what i expected is the row shouldn't be modified by browser 2 in the first 60 seconds(blank page with loading favicon or error throw?)https://laravel.com/docs/5.2/queries#pessimistic-lockingand i did some research but still cannot understand what different between sharedLock(LOCK IN SHARE MODE) and lockForUpdate(FOR UPDATE)btw i confirmed the database is innodb 解决方案 This work, finally, but still don't understand what sharedLock(LOCK IN SHARE MODE) and lockForUpdate(FOR UPDATE) different public function index() { return dd(\DB::transaction(function() { if (\Auth::guard('user')->check()) { $model = \App\Models\User::lockForUpdate()->find(1); sleep(30); $model->point = 100000; $model->save(); } else { $model = \App\Models\User::lockForUpdate()->find(1); $model->point = $model->point + 1; $model->save(); } return $model; })); } 这篇关于Laravel lockforupdate(悲观锁定)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
09-12 10:23
查看更多