php - 多个应用程序访问相同的数据

标签 php mysql database postgresql

所以我的团队正在用 PHP 开发一个 API。 我主要担心的是 2 个人打电话来更新同一行会发生什么。

因此,如果一个 API 调用先读取,然后处理信息,然后写入,如果另一个 API 调用对同一行数据执行相同的操作,会发生什么情况。我们正在使用 Postgres 或 Mysql。

User has 100 dollars.
API Call 1 to ADD 20 1 reads 100.
API Call 2 to Subtract 20 reads 100.
API Call 1 writes 120;
API Call 2 write 80;( instead of 100);

我知道有一个涉及锁定表或行的解决方案,它能解决我的问题吗?

我需要一个 API 调用 2 不会失败,而是等待或重试的解决方案。

[编辑]

我应该更详细地说明我们正在做的事情。这是一个浏览器 mmo 游戏,它有 2 个部分。一个 PHP REST API 和 Java 服务器。

浏览器调用 AJAX GET API ex。 : 以 4 万美元 build 工厂 PHP API 检查资金是否充足,并返回 JSON。所以 - 来自玩家的 4 万美元。

我们的服务器 ticks 使用 boneCP 进行并发数据库调用,以更新基金等值。

因此,根据我之前的示例,CALL 1 将是我们的 PHP API,而 CALL 2 将是服务器滴答。

最佳答案

您需要了解 transactions , transaction isolation , 和 explicit row-level locking :

select ... for update

在您的情况下,还要考虑使用表达式。如果你发布类似这样的东西,你的生活会简单得多:

update account set amount = amount - 20 where id = ?

关于php - 多个应用程序访问相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170762/

相关文章:

php - 搜索具有不同字段的两个不同的 MySQL 表

php - CodeIgniter set_userdata 是否会自动转义数据?

javascript - 将混合 android 应用程序与 mysql 连接

当我尝试在数据库中注册新记录时,PHP 替换了文本

Android 数据库选择查询 - 不显示所有记录

php - 在提交时检查文本框中所需文本的代码

php - 删除 PHP Cookie?

php - 传递给函数的 laravel 值不会传递到数据库中

mysql - 使用一个查询更新两个表

java - 数据库错误: "NullPointerException: Attempt to invoke virtual method getApplicationInfo()... on a null object reference"