В настоящее время я перехожу с 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)
);
Спасибо вам всем!
@RToyo, спасибо. Ты прав. Вот почему я перехожу на PostgreSQL, чтобы попытаться избавиться от вредных привычек, которые дал мне MySQL, и повысить свой уровень знаний о базах данных.
@Guilhermao Если ответ правильный, отметьте ответ как полученный.






Часть 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 Предложение order by повлияет на то, как быстро ваша база данных сможет извлекать данные. Думайте об этом как о любом другом списке данных - если вам нужен упорядоченный список данных, вам нужно пройти каждую строку, чтобы оценить, в каком порядке их разместить. Если вы хотите ускорить это, вы можете создать index на строка, по которой вы хотите отсортировать - она в основном создает упорядоченный список значений для этого столбца со ссылкой на исходную строку. Таким образом, БД может просто искать порядок из уже упорядоченного списка вместо сканирования таблицы. Индексирование - очень важная концепция, которую нужно изучить.
Это не прямой ответ на ваш вопрос, но, вообще говоря, вы никогда не должны ожидать, что ваша СУБД вернет ваши результаты определенным образом, если вы не используете предложение
order by.