Maison > base de données > tutoriel mysql > Pourquoi une requête Postgres SELECT renvoie-t-elle des lignes dans un ordre imprévu après une mise à jour de ligne ?

Pourquoi une requête Postgres SELECT renvoie-t-elle des lignes dans un ordre imprévu après une mise à jour de ligne ?

Mary-Kate Olsen
Libérer: 2024-10-29 05:03:02
original
733 Les gens l'ont consulté

Why Does a Postgres SELECT Query Return Rows in an Unforeseen Order After a Row Update?

Ordre imprévu des lignes dans les requêtes SELECT de Postgres après la mise à jour des lignes

Postgres est un système de gestion de base de données relationnelle largement utilisé, qui soulève souvent des questions concernant l' comportement par défaut de ses opérations. Dans ce scénario, la requête concerne l'ordre inattendu des lignes dans le résultat d'une requête SELECT suite à une opération de mise à jour sur une ligne.

Lors de l'exécution d'une requête SELECT sans spécifier explicitement de clause ORDER BY, Postgres récupère les lignes de la base de données dans un ordre arbitraire. Cet ordre dépend principalement des modèles physiques de stockage et de récupération de la base de données. Pour illustrer ce concept, considérons l'exemple suivant :

postgres=# select * from check_user;
 id | name
----+------
  1 | x
  2 | y
  3 | z
  4 | a
  5 | c1\
  6 | c2
  7 | c3
(7 rows)
Copier après la connexion

Dans le tableau ci-dessus, les lignes sont initialement classées selon leurs valeurs d'identifiant. Cependant, après avoir mis à jour une ligne portant le même nom qu'une autre ligne :

postgres=# update check_user set name = 'c1' where name = 'c1\';
UPDATE 1
postgres=# select * from check_user;
 id | name
----+------
  1 | x
  2 | y
  3 | z
  4 | a
  6 | c2
  7 | c3
  5 | c1
(7 rows)
Copier après la connexion

L'ordre des lignes a changé, la ligne mise à jour apparaissant désormais en bas du résultat. En effet, Postgres ne met généralement pas à jour les lignes en place, mais les marque comme supprimées et insère de nouvelles lignes.

Par conséquent, lorsque des requêtes SELECT ultérieures sont exécutées, Postgres récupère les lignes de la source disponible la plus rapide, ce qui peut ou non Ne correspond pas à la commande originale. Pour garantir un ordre prévisible, il est impératif de spécifier explicitement une clause ORDER BY dans les requêtes SELECT.

En résumé, Postgres ne maintient pas d'ordre par défaut prédéfini pour les lignes dans les jeux de résultats, sauf indication explicite via un ORDER BY. clause. Au lieu de cela, il récupère les lignes en fonction de modèles de stockage et de récupération internes, ce qui peut entraîner des résultats désordonnés après la mise à jour des lignes. Il est crucial de s'appuyer sur des mécanismes de classement explicites pour garantir un classement cohérent dans les requêtes SELECT.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal