0

我有以下简单的场景。

三台计算机将更新电影院预订表。我应该锁定整个表还是锁定与将要更新的座位相对应的行?我可以在这里考虑乐观并发控制吗?

我只是在搜索乐观和悲观并发控制,偶然发现了不同的锁,想知道哪种锁最适合哪些场景。

4

1 回答 1

1

您的 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

于 2011-07-29T13:06:32.810 回答