更新时 PostgreSQL 表行到底部

Gui*_*mao 4 php mysql postgresql laravel-5

我目前正在 Laravel 应用程序中从 MySQL 迁移到 PostgreSQL,我注意到更新时,该行转到表的末尾(底部)。

在应用程序中,我知道我可以使用 ORDER BY 进行排序,但我指的是执行 UPDATE 操作时数据库的内部行为。

在Mysql中,它保持在更新前占据的相同位置。有什么办法可以应用这个功能吗?它会是一个 InnoDB 功能吗?使用 Navicat Premium 12.1 DBMS。

我认为这只是审美因素,但即便如此,我还是想学习如何执行这种“永久受戒”。

数据库采用 UTF-8 编码和 pt_BR.UTF8 排序规则和 ctype。以下是表格:

CREATE TABLE `properties` (
   `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `title` varchar(255) NOT NULL,
   `description` text NOT NULL,
   `name` varchar(255),
   `rental_price` decimal(10, 2),
   `sale_price` decimal(10, 2)
);
Run Code Online (Sandbox Code Playgroud)

谢谢你们!

Max*_* C. 5

第 1 部分:一般使用 ORDER BY

如果您不使用该ORDER BY语句,则 MySQL 和 PostgreSQL(以及大多数关系 DBMS 系统)都不会对记录的顺序做出任何承诺。

您应该重构您的应用程序以使用该ORDER BY语句。如果您希望您的数据集首先按最新排序,您可以使用以下内容:

SELECT * FROM yourtable ORDER BY id DESC;
SELECT * FROM youtable ORDER BY creation_date DESC; -- if your table has such a column
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用以下方法之一首先拥有最旧的对象:

SELECT * FROM yourtable ORDER BY id ASC;
SELECT * FROM youtable ORDER BY creation_date ASC; -- if your table has such a column
Run Code Online (Sandbox Code Playgroud)

第 2 部分:研究机制

您在问题中添加了更详细的查询:

[...] 我知道我可以使用 ORDER BY 进行排序,但我指的是执行 UPDATE 操作时数据库的内部行为。

执行查询时,有多种因素会影响屏幕上显示的数据库记录的顺序。在现实生活中的应用中,(实际上)不可能预测这个序列。

我认为这简直是PostgreSQL的为更新的记录创建一个新的纪录,可以发现效果这里更新行时部分。我建议不要在您的任何应用程序中依赖这种行为。