我为电影预订系统提供以下伪MySQL:
表格电影:
id int auto_increment not null,
name varchar(100) not null,
.....
表MovieSched:
movie_id foreign key refers to Movie,
sched_id int auto increment,
date & time,
max_size
表MovieSchedSignUp:
sched_id,
user_id
每个电影时间表都有max_size可以注册的用户。要注册用户,我在MovieSchedSignUp中插入一行。
问题是:如何在确保计划未“超额预订”的同时在MovieSchedSignUp中插入一行(注册< = max_size)
具体来说,要为用户注册时间表,我应该使用什么查询,以及如何检查时间表是否已满(这样我可以告诉用户注册是否成功)?请注意,这些需要某种原子操作,也许是一个事务。
最有效的方法是什么?
答案 0 :(得分:0)
SQL的粗略想法: -
INSERT INTO Table MovieSchedSignUp (sched_id, user_id)
SELECT '$move_sched_id', '$user_id'
FROM
(
SELECT sched_id, COUNT(*) AS BookingCount
FROM MovieSchedSignUp
WHERE sched_id = '$move_sched_id'
GROUP BY sched_id
HAVING BookingCount < $max_size
)
根据选择插入记录。 select返回2个固定值,如果预订数量少于最大预订数量,则从子查询中选择返回计划ID。