我需要锁定多行,但只获取一行作为返回结果,例如锁定用户:2,4 和 7,但只获取用户的数据where id = 2
好吧,据我了解,有两种可能的方法:
1)运行两个不同的查询:
-- get user data and lock that row
SELECT some_column FROM users WHERE id = 2 FOR UPDATE INTO my_var;
-- just lock another rows
SELECT some_column FROM users WHERE id IN(4,7) FOR UPDATE;
2)使用一个查询,带有 CTE 和“假”更新,例如:
WITH t AS(
UPDATE users
SET some_column = some_column
WHERE id IN(2,4,7)
returning some_column
)
SELECT some_column FROM t WHERE id = 2
INTO my_var;
那么,哪种方式更合适呢?或者可能有更好的方法?