在我对表进行更新后,有谁知道为什么行的顺序发生了变化?有没有办法让订单返回或更改为另一个订单,例如:按字母顺序排序?
这是我执行的更新:
update t set amount = amount + 1 where account = accountNumber
此次更新后,当我去看表时,订单已更改
答案 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