我很好地理解当使用SELECT FOR UPDATE并且发生另一个SELECT / UPDATE时关于行更新的情况。但是当使用SELECT FOR UPDATE发生两个请求时会发生什么。
例如:
我不关心请求返回后会发生什么,更新表的时间到了。更新的第二个将抛出或更新行上的最后可能的数据。
但实际的HTTP请求是否都由它们完成?换句话说,在这种情况下,可以使用SELECT FOR UPDATE(滥用)作为线程同步机制吗?
答案 0 :(得分:4)
你正在混合图层。 PostgreSQL不做HTTP。 SELECT ... FOR UPDATE
与HTTP无关。
以下是它的工作原理:
BEGIN
BEGIN
SELECT ... FOR UPDATE
并获取一行或多行SELECT ... FOR UPDATE
并匹配其中一个相同的行,因此阻止,不返回任何内容,直到... COMMIT
或ROLLBACK
SELECT ... FOR UPDATE
换句话说,锁定持续时间由事务边界控制。交易边界取决于您的应用程序和框架,在您尚未以任何方式识别的数据库层之上。
(另外,这与线程无关。)