Postgresql:更新时行号更改

hub*_*ber 2 sql postgresql

我是Postgresql的新手,我使用的是9.3版本.我有一张表,其中有几行.我的问题是,当我更新一行时,行号被更改,并被移动到表中的最后一个位置.我的问题是:这是默认行为,因为我认为当一行更新时,它不应该从它的位置移动?该操作似乎就像删除然后再次插入行.

以下是示例SQL:

CREATE TABLE cities
(
    city_id serial, 
    city_name character varying(50), 
    PRIMARY KEY (city_id)
);

INSERT INTO cities (city_name) VALUES ('ABC');
INSERT INTO cities (city_name) VALUES ('DEF');
INSERT INTO cities (city_name) VALUES ('GHI');
INSERT INTO cities (city_name) VALUES ('JKL');

UPDATE cities
    SET city_name = 'XYZ'
    WHERE city_id = 1;
Run Code Online (Sandbox Code Playgroud)

从今起:

SELECT * FROM cities;
Run Code Online (Sandbox Code Playgroud)

在最后一个位置移动ID为1的更新行.

2, DEF
3, GHI
4, JKL
1, XYZ
Run Code Online (Sandbox Code Playgroud)

谢谢

a_h*_*ame 7

行号已更改

关系表中没有"行号"这样的东西.

我想当一行更新时,不应该从它的位置移动它

因为一行没有"地方",所以没有"移动"它的东西.


关系表中的行排序.

把它们想象成一个篮子里的球.

如果没有ORDER BYDBMS,可以按照它认为合适的任何顺序自由返回行.

如果您需要以某种方式排序行,那么唯一(实际上:唯一的)方法就是使用ORDER BY语句.