Php 防止同时用户覆盖MYSQL数据

Php 防止同时用户覆盖MYSQL数据,php,mysql,Php,Mysql,我有一个php/MYSQL网站,供学生在宴会上选择座位。一旦有10个座位,这张桌子就不再有空了。我如何防止两个或两个以上的学生同时为自己预订一个座位&最多3位客人?看起来,如果两个学生同时进入,并试图在同一张桌子上预订座位,那么数据就被夸大了,或者可以分配10个以上的座位。我需要一种方法来确保第一个尝试预订桌子座位的用户能够在第二个用户能够写入其选择之前写入数据库?任何帮助都将不胜感激。做类似的事情 UPDATE Seating SET AvailableSeats = AvailableSe

我有一个php/MYSQL网站,供学生在宴会上选择座位。一旦有10个座位,这张桌子就不再有空了。我如何防止两个或两个以上的学生同时为自己预订一个座位&最多3位客人?看起来,如果两个学生同时进入,并试图在同一张桌子上预订座位,那么数据就被夸大了,或者可以分配10个以上的座位。我需要一种方法来确保第一个尝试预订桌子座位的用户能够在第二个用户能够写入其选择之前写入数据库?任何帮助都将不胜感激。

做类似的事情

 UPDATE Seating SET AvailableSeats = AvailableSeats - 4 WHERE TableId = 5 AND AvailableSeats = 7;

从前面的阅读中你得到了7。如果此更新失败,那么您知道在此期间有其他人分配了座位。

在调用代码进行预订之前,我会立即检查可用性是否仍然存在,例如

if (functionToCheckAvailability(number_of_seats)) {
    bookSeats(number_of_seats);
}

+1这个解决方案会奏效。但是,如果您想预订4个座位,我会将可用座位设置为>=4,因为只要有足够的可用座位,我们并不关心可用座位的数量是否发生了变化。此更新将获得记录的独占锁,因此其他查询甚至无法选择它。这就解决了并发性问题。检查受影响的行数,查看您是否成功预订了座位。