【问题标题】:Update a record in database at the exact same time同时更新数据库中的记录
【发布时间】:2014-04-13 08:20:52
【问题描述】:

我目前正在开发一个 PHP Web 应用程序并使用 MySQL(xampp 默认设置)作为我的 dbms。我只是想知道如果有两个或多个客户端同时向数据库发出 UPDATE 查询会发生什么?

For example 

**User 1 issue**
UPDATE info SET reply='helloworldOne' WHERE info_id = 1; 

**User 2 issue**
UPDATE info SET reply='helloworldTwo' WHERE info_id = 1; 

**User 3 issue**
UPDATE info SET reply='helloworldThree' WHERE info_id = 1;

and so on....

Codes in my web app
$postReply = $_POST['reply'];

$update = "UPDATE info SET reply='$postReply' WHERE info_id = 1;";
$result = mysqli_query($connection, $update);

1) 在这种情况下会发生什么,因为所有 UPDATE 查询都在 info_id 1 上?
2) MySQL 是否自动将锁定应用于 info_id 1?因为我没有在我的 PHP 中应用任何事务代码(例如 beginTransaction)。
3) MySQL 会选择更新哪一个?其他客户会怎样?

【问题讨论】:

    标签: php mysql sql database acid


    【解决方案1】:

    在您进行更新时会自动完成锁定,因此基本上查询不会在同一时刻发生,它们将一个接一个地排队。 服务器将处理竞争条件,因此您无法预测示例中的最终结果。

    【讨论】:

    • 最终结果是什么?
    • 这取决于哪个先获得了锁。一个做它的事,然后另一个。结果是什么取决于这两个动作是什么。
    • 你无法预测你的案例的最终结果
    • 那么你的意思是所有三个查询都会被执行对吗?
    • 提示:也许您应该为每个用户使用一个包含回复的日志表,因此您将使用插入而不是更新,这样您就不会丢失信息。
    【解决方案2】:

    MySQL dbms 处理该问题。没什么好担心的

    【讨论】:

    • 知道哪个查询通过了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多