【发布时间】:2020-02-09 21:21:27
【问题描述】:
我有一个场景,我收到客户的出租车请求,然后我向多个司机发送取车请求。现在想象一下,如果两个收到请求的司机同时点击“接受”按钮,那么哪个司机会搭车。
我有一个骑行表,其中包含ride_id、driver_id、fulfilled(Boolean) 列。
到目前为止,我正在做的是在点击“接受”按钮后立即调用 API。此 GET 请求 API 检查行程是否已完成。如果是,我会向司机显示一条消息,说乘车已经完成,否则我会点击另一个 POST API 请求,该请求将 DB 中的已完成值更新为 true 并更新 driver_id。
现在进入我们的场景,当两个驱动程序同时点击“Accept”时,将发出两个 GET 请求,并且两者都将得到“Not Fulfilled”作为响应,此后两者都将发送一个 POST 请求。现在我很困惑谁的数据将在 DB 中更新。
我在后端使用 PHP 和 MYSQL 作为数据库。
【问题讨论】:
-
数据库应该为您处理这一切。你只需要正确处理失败的更新
-
同意。但是有什么方法可以确定数据库将首先选择哪个请求?
-
@RiggsFolly 或多或少意味着运行 ->
UPDATE ... SET fulfilled = 1 [,...] WHERE fulfilled = 0 AND ride_id = ?然后顺序无关紧要哪个更新先出现。兜风。 -
@RaymondNijland 是的,我明白了,但也有一个 driver_id 列。那么如何确定哪个司机的 ID 将在那里呢?或者我只能在插入请求后进行检查,然后进行选择调用以检查更新的驱动程序 ID?
-
查看@GMB 的 SQL 也使用了与我相同的想法,但添加了解释..
标签: php mysql rowlocking table-locking