这是我的设置: MySQL 数据库中的表格,包含 30 分钟的时间段(整个小时和半小时) 一个网站,显示一段时间内每个时间段有多少房间可供预订的表格。最低预订时间为一小时,因此每次预订至少保留两个位置,当预订时,它们之前的位置将变得不可用(不能预订房间 30 分钟)
我的问题是这样的:我在 php 脚本中使用 PDO 事务,通过更改它们的状态(两列枚举类型)来为预订预留多个插槽。因此,如果假设两个或多个客户尝试在同一时间段或之前的一个时间段预订房间,如果我使用 SELECT FOR UPDATE 会发生什么?第一个是否继续该过程而其他人被拒绝(通过错误或空集)或其他人是否在第一个完成后等待并在他预订的情况下提交数据库中的更改或在该情况下回滚他改变了主意,然后第二快的客户尝试选择行并更新它们,这取决于第一个客户的操作?
基本上我想知道我是否必须实现某种重试系统。
另外,我很好奇这个临时锁什么时候被移除;仅在事务的情况下提交事务(mysql,自动提交关闭)或影响select语句中的部分/所有行的下一次更新?