Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Laravel`increment()`是否锁定行?_Mysql_Laravel_Race Condition - Fatal编程技术网

Mysql Laravel`increment()`是否锁定行?

Mysql 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分

在雄辩的模型上调用Laravel
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锁定表,我同意这个假设,因为发生这种情况的机会已经非常少了。好吧,兄弟,看看类似的东西:这也是一篇很棒的帖子