MySQL会做什么,如果它同时更新[重复]

问题描述 投票:0回答:1

After having a suggestion from the previous question

我现在使用数据库计算访问者数量。在写剧本时,我有一个疑问因此得到了SO的帮助。

假设我的数据库有一个名为Total的表,值为5

两个不同的访问者同时访问该网站,我的脚本

$sqltc = "UPDATE visits SET Total='$ttl' WHERE Sr=1";
mysqli_query($link, $sqltc);

将尝试更新数据库。

现在我怀疑表中的新价值是什么?

567anything else

我知道这是一个罕见的案例,但使用脚本的网站是测验网站,并且会有大量访问者同时访问。

脚本的完整代码:

$sql = "SELECT  * FROM visits WHERE Sr = '1'";
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_array($result);

$date =  $row['Date'];
$ttcounter =  $row['Total'];

$ttcounter++;
$ttl = $ttcounter;

$sqltc = "UPDATE visits SET Total='$ttl' WHERE Sr=1";
mysqli_query($link, $sqltc);
php mysql
1个回答
0
投票

一个更简单的解决方案是像这样添加

$sqltc = "UPDATE visits SET Total=Total+1 WHERE Sr=1";

这只会在Total的现有值中添加一个,您不再需要获取旧的行值并向其添加内容,然后再次更新该行。

这也消除了2个访问者试图获取当前Total值的可能性,并且两个访问者都用6覆盖当前值5。 MySQL将锁定行,以便一次只有一个访问者可以应用他们的更新,因此您获得正确的值7。

© www.soinside.com 2019 - 2024. All rights reserved.