Postgresql:更新时行号更改

时间:2014-10-28 22:19:50

标签: 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;

现在,在:

SELECT * FROM cities;

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

2, DEF
3, GHI
4, JKL
1, XYZ

由于

1 个答案:

答案 0 :(得分:7)

  

行号被更改

没有"行号"在关系表中。

  

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

由于一排没有"地点",没有"移动"它也可以。


关系表中的行已排序。

将它们想象成一个篮子里的球。

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

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