При обновлении строка таблицы PostgreSQL идет вниз

В настоящее время я перехожу с MySQL на PostgreSQL в приложении Laravel, и я заметил, что при обновлении строка переходит в конец таблицы (внизу).

В приложении, которое я знаю, я могу использовать ORDER BY для сортировки, но я имею в виду внутреннее поведение базы данных при выполнении действия UPDATE.

В Mysql он остается на том же месте, что и до обновления. Есть ли способ применить эту функцию? Будет ли это функция InnoDB? Использование СУБД Navicat Premium 12.1.

Я думаю, что это чисто эстетический фактор, но все же я хотел бы научиться выполнять это «постоянное рукоположение».

База данных находится в кодировке 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)
);

Спасибо вам всем!

Это не прямой ответ на ваш вопрос, но, вообще говоря, вы никогда не должны ожидать, что ваша СУБД вернет ваши результаты определенным образом, если вы не используете предложение order by.

RToyo 24.09.2018 21:37

@RToyo, спасибо. Ты прав. Вот почему я перехожу на PostgreSQL, чтобы попытаться избавиться от вредных привычек, которые дал мне MySQL, и повысить свой уровень знаний о базах данных.

Guilhermao 24.09.2018 21:53

@Guilhermao Если ответ правильный, отметьте ответ как полученный.

Michael Dorner 25.09.2018 10:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
3
702
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Часть 1: обычно используйте ORDER BY

Если вы не используете оператор ORDER BY, и MySQL, и PostgreSQL (и в этом отношении большинство систем реляционных СУБД) не дают никаких обещаний относительно порядка записей.

Вам следует провести рефакторинг вашего приложения, чтобы использовать оператор ORDER BY. Если вы хотите, чтобы ваш набор данных был сначала упорядочен по новейшим, вы можете использовать что-то вроде:

SELECT * FROM yourtable ORDER BY id DESC;
SELECT * FROM youtable ORDER BY creation_date DESC; -- if your table has such a column

Точно так же вы можете сначала получить самые старые объекты, используя одно из следующих действий:

SELECT * FROM yourtable ORDER BY id ASC;
SELECT * FROM youtable ORDER BY creation_date ASC; -- if your table has such a column

Часть 2: Изучение механики

Вы добавили к своему вопросу более подробный запрос:

[...] I know I can use ORDER BY to sort, but I am referring to the internal behavior of the database while performing the UPDATE action.

Есть несколько факторов, которые влияют на последовательность записей базы данных, отображаемых на вашем экране при выполнении запроса. В реальном приложении эту последовательность (практически) невозможно предсказать.

Я предполагаю, что это просто результат того, что PostgreSQL создает новую запись для обновленной записи, как можно найти здесь в разделе Обновление строки. Я предлагаю не полагаться на это поведение ни в одном из ваших приложений.

Отлично! Как вы думаете, это оказывает какое-либо негативное влияние на получение данных?

Guilhermao 25.09.2018 14:38

Я не знаю. Но предлагаю открыть другой вопрос. Наверняка у кого-то здесь будет ответ :-) Если вам нравится ответ на этот вопрос, подумайте о голосовании и отметьте его как правильный ответ

Maximilian C. 25.09.2018 14:42

@Guilhermao Предложение order by повлияет на то, как быстро ваша база данных сможет извлекать данные. Думайте об этом как о любом другом списке данных - если вам нужен упорядоченный список данных, вам нужно пройти каждую строку, чтобы оценить, в каком порядке их разместить. Если вы хотите ускорить это, вы можете создать index на строка, по которой вы хотите отсортировать - она ​​в основном создает упорядоченный список значений для этого столбца со ссылкой на исходную строку. Таким образом, БД может просто искать порядок из уже упорядоченного списка вместо сканирования таблицы. Индексирование - очень важная концепция, которую нужно изучить.

RToyo 25.09.2018 16:49

Другие вопросы по теме