相关疑难解决方法(0)

子查询中的顺序是否保证保留?

我特别想知道PostgreSQL.鉴于以下人为的例子:

SELECT name FROM
  (SELECT name FROM people WHERE age >= 18 ORDER BY age DESC) p
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

从外部查询返回的名称是否保证按内核查询的顺序排列?

sql postgresql subquery sql-order-by

12
推荐指数
2
解决办法
4541
查看次数

是否在SELECT ... ORDER BY ... FOR UPDATE语句中按顺序锁定行?

这个问题可以被视为对我的评论的后续跟进可以两个并发但相同的DELETE语句导致死锁吗?.

我想知道my_status在以下语句中行是否按升序锁定:

SELECT 1 FROM my_table ORDER BY my_status FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)

https://www.postgresql.org/docs/9.5/static/sql-select.html上有一句有趣的评论说:

SELECTREAD COMMITTED事务隔离级别运行的命令以及使用ORDER BY和锁定子句可能无序地返回行.这是因为ORDER BY首先应用.该命令对结果进行排序,但可能会阻止尝试获取一个或多个行的锁定.一旦SELECT疏导,一些排序列值可能已被修改,导致出现被淘汰的顺序(尽管它们是为了在原有的列值而言)的行.例如,可以通过将FOR UPDATE/ SHARE子句放在子查询中来根据需要解决这个问题

SELECT * FROM (SELECT * FROM mytable FOR UPDATE) ss ORDER BY column1;
Run Code Online (Sandbox Code Playgroud)

我不确定这是否能回答我的问题.所有这些都是ORDER BY首先应用的,并且您需要放入FOR UPDATE子查询来解决副作用,如果在此期间更改了订单列的值,实际输出顺序可能会有所不同.换句话说,放入FOR UPDATE子查询可确保在订购之前发生锁定.

但这并没有真正告诉我们这些行是否实际上是按照ORDER BY条款确定的顺序锁定的?

sql postgresql database-deadlocks postgresql-9.5

5
推荐指数
0
解决办法
279
查看次数