PostgreSQL - 在我创建的函数中对表进行更新,现在表中行的顺序已更改

时间:2015-11-19 00:19:31

标签: postgresql

在我对表进行更新后,有谁知道为什么行的顺序发生了变化?有没有办法让订单返回或更改为另一个订单,例如:按字母顺序排序?

这是我执行的更新:

update t set amount = amount + 1 where account = accountNumber

此次更新后,当我去看表时,订单已更改

1 个答案:

答案 0 :(得分:1)

表没有自然的行顺序,如果您未在ORDER BY

的末尾添加SELECT子句,某些数据库系统实际上会拒绝您的查询

为什么订单会改变?

因为数据库引擎以物理顺序提取行,所以它们来自存储。某些引擎(如SQL Server)可以使用CLUSTERED INDEX来强制执行物理订单,但仍然无法保证您以精确的顺​​序获得结果。

聚集索引主要作为优化存在。 PostgreSQL有一个类似的CLUSTER函数来改变物理顺序,但这是一个锁定表的繁重过程:http://www.postgresql.org/docs/9.1/static/sql-cluster.html

如何强制按字母顺序排列?

在查询中添加ORDER BY子句。

SELECT * FROM table ORDER BY column