我不知道如何正确表达我的问题。但是,为了提供有关我要解决的问题的更多详细信息,让我描述一下我的应用程序。假设我正在尝试实现队列保留应用程序,并且大致维护了表中的插槽数。
id | appointment | slots_available | slots_total
---------------------------------------------------
1 | apt 1 | 30 | 30
2 | apt 2 | 1 | 5
.. | .. | .. | ..
因此,在竞争的情况下,假设一切都在应用程序端起作用。应用程序中可能会发生以下情况:
user 1 -> reserves apt 2 -> [validate if slot exists] -> update slot_available to 0 -> reserve (insert a record)
user 2 -> reserves ap2 2 -> validate if slot exists -> [update slot_available to 0] -> reserve (insert a record)
如果用户1和2碰巧在用户界面中找到同时可用于apt2的插槽,该怎么办? (当然,我将首先验证是否有一个插槽,但是如果其中一个都没有单击,它们将在UI中看到相同的值)。然后两个人同时提交保留。
现在,如果用户2验证了是否有可用的插槽,即使用户2已经使用它,尽管更新操作尚未完成,该怎么办?然后将有两个插入。
无论如何,如何确保只有其中一个在数据库级别上获得预订?我敢肯定这是一个常见的情况,但是我还不知道如何实现这样的事情。只要解决方案,建议重塑也是可以接受的。