租车双重预订预防

时间:2014-11-20 16:55:21

标签: php mysql transactions

我一直在网上搜索,现在需要澄清一下。

我正在建立一个租车网站,客户可以在周末或一周内预订豪华车。

我遇到的问题是创建一种方法来阻止2个人在同一日期预订同一辆车。我读过有关TRANSACTION的内容,并想确认它是如何工作的。我已经阅读了很多文章,但没有任何证据证明我认为它是如何运作的。

当TRANSACTION启动时,它是否暂时将数据插入数据库,然后阻止其他人插入相同的数据?或者它只是将插入存储在用户浏览器中,并且仅在提交后插入?

TRANSACTION听起来像我需要的但我只需要在我继续之前确认。否则我需要另一种解决方案。

提前致谢,我希望这对任何花时间阅读它的人都有意义。

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题:

包含汽车和预订时间的UNIQUE索引,因此无法使用相同的组合创建两条记录:

INSERT INTO bookings (car_id, date, customer_id) VALUES (1, '2014-09-29', 1903)

如果在该日期预先存在预订,INSERT将失败并显示错误。此处的bookings表表示特定日期的特定汽车的可用性,如果已预订,则表示客户预订了该汽车。您可能希望添加另一个图层来表示多日预订。

或者,预订表上的标志通常为NULL但可以在预订时设置,但您的更新会检查它是否成功:

UPDATE bookings SET customer_id=1903 WHERE id=4535 AND customer_id IS NULL

通过这种方式,您无法重新预订已经预订的汽车。