我有以下简单的场景。
三台计算机将更新电影院预订表。我应该锁定整个表还是锁定与将要更新的座位相对应的行?我可以在这里考虑乐观并发控制吗?
我只是在搜索乐观和悲观并发控制,偶然发现了不同的锁,想知道哪种锁最适合哪些场景。
您的 DBMS 应该处理这种锁定,您只需要确保不要尝试更新已预订的座位 - 例如
update seat
set status = 'BOOKED', booking_ref = :booking_ref
where seat_no = :seat_no -- identify the seat to book
and status = 'FREE'; -- ensure it is currently free
如果 2 个会话尝试同时预订同一个座位,一个会成功,另一个会失败。您的代码需要检查它是否成功。
乐观与悲观锁定是一个应用程序而不是 DBMS 问题。我不会在这里全部介绍,而是向您推荐一个现有的 SO question。