php - 如果同时更新MySQL会做什么

标签 php mysql

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);

最佳答案

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

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

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

这还消除了 2 个访问者都尝试获取 Total 的当前值以及两个访问者都用 6 覆盖当前值 5 的可能性。 MySQL 将锁定该行,以便一次只有一个访问者可以应用其更新,因此您会得到正确的值 7。

关于php - 如果同时更新MySQL会做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47887254/

相关文章:

php - 在 PHP 中传递第 1-2-3-4 页的数据...(无 session /cookie)

php - PDO 不在报价后插入

php - 同一查询中的多个 MySQL SELECT

php - 如何使用php、mysql更新数据库

php - mysql LIMIT 并不断检索行

php - 使用 curl 启用 GSS 协商

php - 最近的个人资料访客和邮件系统

php - 如何在每个循环获取发布数据后将数组插入mysql

mysql - 查询需要很长时间才能执行并导致站点崩溃

php - 如何格式化输出日期PHP