我是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
由于
答案 0 :(得分:7)
行号被更改
没有"行号"在关系表中。
我认为当一行更新时,不应该从它的位置移动
由于一排没有"地点",没有"移动"它也可以。
将它们想象成一个篮子里的球。
如果没有ORDER BY
,DBMS可以按照它认为合适的任何顺序自由返回行。
如果您需要以某种方式排序行, only (实际上:唯一的)方法是使用ORDER BY
语句。