php 和 mySQL 数据库并发更新

标签 php mysql database concurrency

假设我想在每次有人访问网页时增加数据库中的计数器。

名为“example”的数据库如下所示:

|姓名......|值(value)........................| ID |

====================

|计数......| 5................| 1 | <----第一行

网页上的代码如下所示:

$db = mysqli_connect("localhost", ....);
$q = "SELECT Value FROM example WHERE id = '1'";
$r=mysqli_query($db, $q);
$result = mysqli_fetch_array($r);
$increment = $result[0] + 1;
$q = "UPDATE example SET Value = '$increment' WHERE id = '1'";
mysqli_query($db,$q);

如果两个人同时访问该网页,A 会获取值 5,紧接着 B 会获取相同的值。他们都会将其增加到 6,并依次执行更新,输入 6 作为计数器值,而实际上应该是 7,因为有两个人访问了该页面。我怎样才能防止这种情况发生?

最佳答案

您可以用一条语句来完成:

"UPDATE example SET Value = Value + 1 WHERE id = '1'";

因此,在您的读取和更新之间也没有其他任务可以更改它。

这是您的脚本

$db = mysqli_connect("localhost", ....); $q = "更新示例 SET Value = Value + 1 WHERE id = '1'"; mysqli_query($db,$q);

关于php 和 mySQL 数据库并发更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778007/

相关文章:

php - 跳过 PHP 中其余(包含的)文件

php - 使用 laravel 从本地机器发送邮件

mysql - Spring boot与@Query注解连接以从Mysql中获取键和值对中选定的列

javascript - 如何在使用 Google map 地理编码器时首先检查 php 语句

javascript - 我有一个 php 文件,在里面的代码中有一个错误,我不知道如何修复它?以及在哪里添加其余代码

mysql - SQL 按类别过滤

php - MySQL防止双重加载

mysql - 具有特定列值的表名和列名列表

java - 如何创建带有数据库的 .jar?

database - Elasticsearch查询返回所有记录