Mysql Laravel`increment()`是否锁定行?
在雄辩的模型上调用LaravelMysql Laravel`increment()`是否锁定行?,mysql,laravel,race-condition,Mysql,Laravel,Race Condition,在雄辩的模型上调用Laravelincrement()是否会锁定行 例如: $userPoints = UsersPoints::where('user_id','=',\Auth::id())->first(); if(isset($userPoints)) { $userPoints->increment('points', 5); } 如果在比赛条件下从两个不同的位置调用,第二个调用是否会覆盖第一个增量,并且我们仍然只得到5分?或者它们加起来,我们得到10分
increment()
是否会锁定行
例如:
$userPoints = UsersPoints::where('user_id','=',\Auth::id())->first();
if(isset($userPoints)) {
$userPoints->increment('points', 5);
}
如果在比赛条件下从两个不同的位置调用,第二个调用是否会覆盖第一个增量,并且我们仍然只得到5分?或者它们加起来,我们得到10分?回答这个问题(对未来的读者很有帮助):您要问的问题取决于数据库配置
大多数MySQL引擎:MyISAM和InnoDB等。。插入、更新或更改表时使用锁定,直到此功能明确关闭。(无论如何,对于大多数情况,这是唯一正确且可理解的实现)
因此,您可以对所获得的内容感到满意,因为它可以在任意数量的并发调用中正常工作:
-- this is something like what laravel query builder translates to
UPDATE users SET points += 5 WHERE user_id = 1
用起始值0调用两次,结果将是10这是一个简单的更新查询,因此它取决于数据库实现,但我认为默认配置应该是10-这意味着为每个transactionAlright锁定表,我同意这个假设,因为发生这种情况的机会已经非常少了。好吧,兄弟,看看类似的东西:这也是一篇很棒的帖子