我需要为老师创建一个小小的预订系统。他打算在特定时间在线投放一些项目主题,学生可以分别选择一个主题。
让我们假设有一个包含两列的主题表#39;主题'和' name_of_student'。我将使用UPDATE将学生姓名分配给主题,但是希望避免两个人同时预订相同主题的情况。
我应该担心这个还是mysql会阻止它?或者我应该明确使用某种锁定机制,如果是,究竟是什么?
答案 0 :(得分:1)
如果两名学生从不同的地方访问数据库,您不能只是UPDATE
该表,因为您可能会覆盖第一人的预订。
在这种情况下,一个常见的策略是添加一个WHERE
子句,以检查在您最终确定主题时该主题是否仍然可用,例如:而不是
UPDATE topics SET name_of_student = 'Bonzoq' WHERE topic_id = 1
你会写
UPDATE topics SET name_of_student = 'Bonzoq' WHERE topic_id = 1
AND name_of_student IS NULL
并检查受影响的记录数是否等于1.如果它等于0,则UPDATE
失败,因为name_of_student
不再是NULL
。