在Eloquent模型上调用Laravel increment()
会锁定行吗?
例如:
$userPoints = UsersPoints::where('user_id','=',\Auth::id())->first();
if(isset($userPoints)) {
$userPoints->increment('points', 5);
}
如果在比赛条件下从两个不同的位置调用,第二个调用是否会覆盖第一个增量,我们最终只得到5分?或者他们会加起来,我们最终获得10分?
答案 0 :(得分:2)
要回答这个问题(对未来的读者有帮助):您询问的问题取决于数据库配置。
大多数MySQL引擎:MyISAM和InnoDB等..在插入,更新或更改表时使用锁定,直到明确关闭此功能。 (无论如何,这是唯一正确且易于理解的实现,对于大多数情况而言)
因此,您可以对所获得的内容感到满意,因为它可以在任意数量的并发呼叫中正常工作:
-- this is something like what laravel query builder translates to
UPDATE users SET points += 5 WHERE user_id = 1
并且以起始值零调用两次将结束10