我非常了解当使用 SELECT FOR UPDATE 并且发生另一个 SELECT/UPDATE 时更新行时会发生什么。但是当使用 SELECT FOR UPDATE 发生两个请求时会发生什么。
例如:
- 线程 A开始一个事务并在一行上执行 SELECT FOR UPDATE 并检索一些信息并开始一个需要时间的 HTTP 请求。在调用返回后,事务被提交并且会话被关闭。
- 当 A 等待请求时,线程 B开始一个新事务并在同一行上执行 SELECT FOR UPDATE。它会检索信息并继续其上的 HTTP 请求,还是会等待线程 A 提交/执行更新,然后从行中检索数据。
我不在乎一旦请求返回并且更新表的时间到来时会发生什么。用于更新的第二个将抛出或更新行上最后可能的数据。
但是实际的 HTTP 请求会由他们俩完成吗?换句话说,在这种情况下 SELECT FOR UPDATE 可以用作(滥用)线程同步机制吗?